feat: add crossplane with AWS integration
This commit is contained in:
parent
12b3ebbe6e
commit
88447c42e0
7 changed files with 330 additions and 0 deletions
35
bootstrap/crossplane.yaml
Normal file
35
bootstrap/crossplane.yaml
Normal file
|
|
@ -0,0 +1,35 @@
|
|||
apiVersion: argoproj.io/v1alpha1
|
||||
kind: Application
|
||||
metadata:
|
||||
creationTimestamp: null
|
||||
name: crossplane
|
||||
namespace: argocd
|
||||
spec:
|
||||
destination:
|
||||
namespace: argocd
|
||||
server: https://kubernetes.default.svc
|
||||
ignoreDifferences:
|
||||
- group: argoproj.io
|
||||
jsonPointers:
|
||||
- /status
|
||||
kind: Application
|
||||
project: default
|
||||
source:
|
||||
path: bootstrap/crossplane
|
||||
repoURL: ssh://git@gitea-ssh.gitops.svc.cluster.local:2222/davad/argo.git
|
||||
syncPolicy:
|
||||
automated:
|
||||
allowEmpty: true
|
||||
prune: true
|
||||
selfHeal: true
|
||||
syncOptions:
|
||||
- allowEmpty=true
|
||||
status:
|
||||
health: {}
|
||||
summary: {}
|
||||
sync:
|
||||
comparedTo:
|
||||
destination: {}
|
||||
source:
|
||||
repoURL: ""
|
||||
status: ""
|
||||
214
bootstrap/crossplane/helm-values.yaml
Normal file
214
bootstrap/crossplane/helm-values.yaml
Normal file
|
|
@ -0,0 +1,214 @@
|
|||
# helm-docs renders these comments into markdown. Use markdown formatting where
|
||||
# appropiate.
|
||||
#
|
||||
# -- The number of Crossplane pod `replicas` to deploy.
|
||||
replicas: 1
|
||||
|
||||
# -- The number of Crossplane ReplicaSets to retain.
|
||||
revisionHistoryLimit: null
|
||||
|
||||
# -- The deployment strategy for the Crossplane and RBAC Manager pods.
|
||||
deploymentStrategy: RollingUpdate
|
||||
|
||||
image:
|
||||
# -- Repository for the Crossplane pod image.
|
||||
repository: xpkg.upbound.io/crossplane/crossplane
|
||||
# -- The Crossplane image tag. Defaults to the value of `appVersion` in `Chart.yaml`.
|
||||
tag: ""
|
||||
# -- The image pull policy used for Crossplane and RBAC Manager pods.
|
||||
pullPolicy: IfNotPresent
|
||||
|
||||
# -- Add `nodeSelectors` to the Crossplane pod deployment.
|
||||
nodeSelector: {}
|
||||
# -- Add `tolerations` to the Crossplane pod deployment.
|
||||
tolerations: []
|
||||
# -- Add `affinities` to the Crossplane pod deployment.
|
||||
affinity: {}
|
||||
# -- Add `topologySpreadConstraints` to the Crossplane pod deployment.
|
||||
topologySpreadConstraints: []
|
||||
|
||||
# -- Enable `hostNetwork` for the Crossplane deployment. Caution: enabling `hostNetwork` grants the Crossplane Pod access to the host network namespace. Consider setting `dnsPolicy` to `ClusterFirstWithHostNet`.
|
||||
hostNetwork: false
|
||||
|
||||
# -- Specify the `dnsPolicy` to be used by the Crossplane pod.
|
||||
dnsPolicy: ""
|
||||
|
||||
# -- Add custom `labels` to the Crossplane pod deployment.
|
||||
customLabels: {}
|
||||
|
||||
# -- Add custom `annotations` to the Crossplane pod deployment.
|
||||
customAnnotations: {}
|
||||
|
||||
serviceAccount:
|
||||
# -- Specifies whether Crossplane ServiceAccount should be created
|
||||
create: true
|
||||
# -- Provide the name of an already created Crossplane ServiceAccount. Required when `serviceAccount.create` is `false`
|
||||
name: ""
|
||||
# -- Add custom `annotations` to the Crossplane ServiceAccount.
|
||||
customAnnotations: {}
|
||||
|
||||
# -- Enable [leader election](https://docs.crossplane.io/latest/concepts/pods/#leader-election) for the Crossplane pod.
|
||||
leaderElection: true
|
||||
# -- Add custom arguments to the Crossplane pod.
|
||||
args: []
|
||||
|
||||
provider:
|
||||
# -- A list of Provider packages to install.
|
||||
packages:
|
||||
# - ghcr.io/crossplane-contrib/provider-aws-iam:v1.20.1
|
||||
- ghcr.io/crossplane-contrib/provider-aws-route53:v1.20.1
|
||||
- ghcr.io/crossplane-contrib/provider-aws-s3:v1.20.1
|
||||
|
||||
configuration:
|
||||
# -- A list of Configuration packages to install.
|
||||
packages: []
|
||||
|
||||
function:
|
||||
# -- A list of Function packages to install
|
||||
packages: []
|
||||
|
||||
# -- The imagePullSecret names to add to the Crossplane ServiceAccount.
|
||||
imagePullSecrets: []
|
||||
|
||||
registryCaBundleConfig:
|
||||
# -- The ConfigMap name containing a custom CA bundle to enable fetching packages from registries with unknown or untrusted certificates.
|
||||
name: ""
|
||||
# -- The ConfigMap key containing a custom CA bundle to enable fetching packages from registries with unknown or untrusted certificates.
|
||||
key: ""
|
||||
|
||||
service:
|
||||
# -- Configure annotations on the service object. Only enabled when webhooks.enabled = true
|
||||
customAnnotations: {}
|
||||
|
||||
webhooks:
|
||||
# -- Enable webhooks for Crossplane and installed Provider packages.
|
||||
enabled: true
|
||||
# -- The port the webhook server listens on.
|
||||
port: ""
|
||||
|
||||
rbacManager:
|
||||
# -- Deploy the RBAC Manager pod and its required roles.
|
||||
deploy: true
|
||||
# -- Don't install aggregated Crossplane ClusterRoles.
|
||||
skipAggregatedClusterRoles: false
|
||||
# -- The number of RBAC Manager pod `replicas` to deploy.
|
||||
replicas: 1
|
||||
# -- The number of RBAC Manager ReplicaSets to retain.
|
||||
revisionHistoryLimit: null
|
||||
# -- Enable [leader election](https://docs.crossplane.io/latest/concepts/pods/#leader-election) for the RBAC Manager pod.
|
||||
leaderElection: true
|
||||
# -- Add custom arguments to the RBAC Manager pod.
|
||||
args: []
|
||||
# -- Add `nodeSelectors` to the RBAC Manager pod deployment.
|
||||
nodeSelector: {}
|
||||
# -- Add `tolerations` to the RBAC Manager pod deployment.
|
||||
tolerations: []
|
||||
# -- Add `affinities` to the RBAC Manager pod deployment.
|
||||
affinity: {}
|
||||
# -- Add `topologySpreadConstraints` to the RBAC Manager pod deployment.
|
||||
topologySpreadConstraints: []
|
||||
|
||||
packageManager:
|
||||
# -- Enable automatic dependency version downgrades. This configuration is only used when `--enable-dependency-version-upgrades` flag is passed.
|
||||
enableAutomaticDependencyDowngrade: false
|
||||
|
||||
# -- The PriorityClass name to apply to the Crossplane and RBAC Manager pods.
|
||||
priorityClassName: ""
|
||||
|
||||
resourcesCrossplane:
|
||||
limits:
|
||||
# -- CPU resource limits for the Crossplane pod.
|
||||
cpu: 500m
|
||||
# -- Memory resource limits for the Crossplane pod.
|
||||
memory: 1024Mi
|
||||
requests:
|
||||
# -- CPU resource requests for the Crossplane pod.
|
||||
cpu: 100m
|
||||
# -- Memory resource requests for the Crossplane pod.
|
||||
memory: 256Mi
|
||||
|
||||
securityContextCrossplane:
|
||||
# -- The user ID used by the Crossplane pod.
|
||||
runAsUser: 65532
|
||||
# -- The group ID used by the Crossplane pod.
|
||||
runAsGroup: 65532
|
||||
# -- Enable `allowPrivilegeEscalation` for the Crossplane pod.
|
||||
allowPrivilegeEscalation: false
|
||||
# -- Set the Crossplane pod root file system as read-only.
|
||||
readOnlyRootFilesystem: true
|
||||
|
||||
packageCache:
|
||||
# -- Set to `Memory` to hold the package cache in a RAM backed file system. Useful for Crossplane development.
|
||||
medium: ""
|
||||
# -- The size limit for the package cache. If medium is `Memory` the `sizeLimit` can't exceed Node memory.
|
||||
sizeLimit: 20Mi
|
||||
# -- The name of a PersistentVolumeClaim to use as the package cache. Disables the default package cache `emptyDir` Volume.
|
||||
pvc: ""
|
||||
# -- The name of a ConfigMap to use as the package cache. Disables the default package cache `emptyDir` Volume.
|
||||
configMap: ""
|
||||
|
||||
resourcesRBACManager:
|
||||
limits:
|
||||
# -- CPU resource limits for the RBAC Manager pod.
|
||||
cpu: 100m
|
||||
# -- Memory resource limits for the RBAC Manager pod.
|
||||
memory: 512Mi
|
||||
requests:
|
||||
# -- CPU resource requests for the RBAC Manager pod.
|
||||
cpu: 100m
|
||||
# -- Memory resource requests for the RBAC Manager pod.
|
||||
memory: 256Mi
|
||||
|
||||
securityContextRBACManager:
|
||||
# -- The user ID used by the RBAC Manager pod.
|
||||
runAsUser: 65532
|
||||
# -- The group ID used by the RBAC Manager pod.
|
||||
runAsGroup: 65532
|
||||
# -- Enable `allowPrivilegeEscalation` for the RBAC Manager pod.
|
||||
allowPrivilegeEscalation: false
|
||||
# -- Set the RBAC Manager pod root file system as read-only.
|
||||
readOnlyRootFilesystem: true
|
||||
|
||||
metrics:
|
||||
# -- Enable Prometheus path, port and scrape annotations and expose port 8080 for both the Crossplane and RBAC Manager pods.
|
||||
enabled: false
|
||||
# -- The port the metrics server listens on.
|
||||
port: ""
|
||||
|
||||
readiness:
|
||||
# -- The port the readyz server listens on.
|
||||
port: ""
|
||||
|
||||
# -- Add custom environmental variables to the Crossplane pod deployment.
|
||||
# Replaces any `.` in a variable name with `_`. For example, `SAMPLE.KEY=value1` becomes `SAMPLE_KEY=value1`.
|
||||
extraEnvVarsCrossplane: {}
|
||||
|
||||
# -- Add custom environmental variables to the RBAC Manager pod deployment.
|
||||
# Replaces any `.` in a variable name with `_`. For example, `SAMPLE.KEY=value1` becomes `SAMPLE_KEY=value1`.
|
||||
extraEnvVarsRBACManager: {}
|
||||
|
||||
# -- Add a custom `securityContext` to the Crossplane pod.
|
||||
podSecurityContextCrossplane: {}
|
||||
|
||||
# -- Add a custom `securityContext` to the RBAC Manager pod.
|
||||
podSecurityContextRBACManager: {}
|
||||
|
||||
# -- Add custom `volumes` to the Crossplane pod.
|
||||
extraVolumesCrossplane: {}
|
||||
|
||||
# -- Add custom `volumeMounts` to the Crossplane pod.
|
||||
extraVolumeMountsCrossplane: {}
|
||||
|
||||
# -- To add arbitrary Kubernetes Objects during a Helm Install
|
||||
extraObjects: []
|
||||
# - apiVersion: pkg.crossplane.io/v1alpha1
|
||||
# kind: ControllerConfig
|
||||
# metadata:
|
||||
# name: aws-config
|
||||
# annotations:
|
||||
# eks.amazonaws.com/role-arn: arn:aws:iam::123456789101:role/example
|
||||
# helm.sh/hook: post-install
|
||||
# spec:
|
||||
# podSecurityContext:
|
||||
# fsGroup: 2000
|
||||
|
||||
17
bootstrap/crossplane/kustomization.yaml
Normal file
17
bootstrap/crossplane/kustomization.yaml
Normal file
|
|
@ -0,0 +1,17 @@
|
|||
apiVersion: kustomize.config.k8s.io/v1beta1
|
||||
kind: Kustomization
|
||||
|
||||
helmCharts:
|
||||
- name: crossplane
|
||||
repo: https://charts.crossplane.io/stable
|
||||
version: 1.19.0
|
||||
namespace: crossplane-system
|
||||
releaseName: crossplane
|
||||
valuesFile: helm-values.yaml
|
||||
|
||||
resources:
|
||||
- ns.yaml
|
||||
- providerconfig.yaml
|
||||
|
||||
generators:
|
||||
- secret-generator.yaml
|
||||
7
bootstrap/crossplane/ns.yaml
Normal file
7
bootstrap/crossplane/ns.yaml
Normal file
|
|
@ -0,0 +1,7 @@
|
|||
apiVersion: v1
|
||||
kind: Namespace
|
||||
metadata:
|
||||
name: crossplane-system
|
||||
labels:
|
||||
name: crossplane-system
|
||||
|
||||
15
bootstrap/crossplane/providerconfig.yaml
Normal file
15
bootstrap/crossplane/providerconfig.yaml
Normal file
|
|
@ -0,0 +1,15 @@
|
|||
apiVersion: aws.upbound.io/v1beta1
|
||||
kind: ProviderConfig
|
||||
metadata:
|
||||
name: default
|
||||
spec:
|
||||
credentials:
|
||||
source: Secret
|
||||
secretRef:
|
||||
namespace: crossplane-system
|
||||
name: aws-secret
|
||||
key: creds
|
||||
|
||||
assumeRole:
|
||||
roleARN: "arn:aws:iam::000654387266:role/crossplane"
|
||||
|
||||
14
bootstrap/crossplane/secret-generator.yaml
Normal file
14
bootstrap/crossplane/secret-generator.yaml
Normal file
|
|
@ -0,0 +1,14 @@
|
|||
apiVersion: viaduct.ai/v1
|
||||
kind: ksops
|
||||
metadata:
|
||||
# Specify a name
|
||||
name: crossplane-secrets
|
||||
annotations:
|
||||
config.kubernetes.io/function: |
|
||||
exec:
|
||||
# if the binary is in your PATH, you can do
|
||||
path: ksops
|
||||
# otherwise, path should be relative to manifest files, like
|
||||
# path: ../../../ksops
|
||||
files:
|
||||
- ./secret.aws.enc.yaml
|
||||
28
bootstrap/crossplane/secret.aws.enc.yaml
Normal file
28
bootstrap/crossplane/secret.aws.enc.yaml
Normal file
|
|
@ -0,0 +1,28 @@
|
|||
apiVersion: v1
|
||||
kind: Secret
|
||||
type: Opaque
|
||||
metadata:
|
||||
name: aws-secret
|
||||
namespace: crossplane-system
|
||||
data:
|
||||
creds: ENC[AES256_GCM,data:/O+OEz7rayPa7zoDbmU8fIrhfQDmDjGpwGZ6TC0+xabwYURlsGRKzPL55vAB2eOhO1yfTCGLFEEm9GMI9niukOqf4O3c31bYXSY4roFna1fpv/fCDimyAQ77vGlYOgKw9agw0xEsqzBvbZdXqTCCVbRbVkWG6zLPkVYEEW12mS0rP3IaavIT+bO/oZSW9IDfA45/RcSXdhxnBe4GWYYYXs0tvLs=,iv:VbBQ1fMe7+wNyTQXTi4yjSBxDMu+EJnuzsNwFOteUso=,tag:pmSkRDxRxcf66miw9w7ypg==,type:str]
|
||||
sops:
|
||||
kms: []
|
||||
gcp_kms: []
|
||||
azure_kv: []
|
||||
hc_vault: []
|
||||
age:
|
||||
- recipient: age1y26vr5qt6th3wu92rnsgkqcpxxah3pqkqa4khcjjycm3kg40aqyqjgfzx9
|
||||
enc: |
|
||||
-----BEGIN AGE ENCRYPTED FILE-----
|
||||
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBvaFZEY2NwZVJOLzRrUEtx
|
||||
andUa2NBQkhlVE5Xd3hmclBkV1Jadkc1RGtjCjVsSWdMSjlNYWNPWmdxZUN2VWVx
|
||||
eXI5OWtGb0kvRENkNW0xVWZCUEVhdmsKLS0tIG1YUkdUSFBSN3BnRHZYbCtoUTJu
|
||||
WE04a1llSndObHBEUFVkZldNZ1VPdkkK+BqNrTGwJL7+694cU6hIzh8rBSF2iIKf
|
||||
btmDLQdRpRglPN4eMKMR/rb00uMF5RHKm8YycTCHfzSOx6ZAEsFQ+w==
|
||||
-----END AGE ENCRYPTED FILE-----
|
||||
lastmodified: "2025-03-01T17:13:29Z"
|
||||
mac: ENC[AES256_GCM,data:5+iGPT8W9I0GJ3ZEwkVtBDm9EbrYEXQCGwijR5GJUU6HETSS7hvZ7SwEXZmBQ/BGKpPG7nLbggUl4oE8VVD5JeUfMnHs1MzL6RabSRuHZXd3UfrYE7bGxwb0kmosa5/2uvYBz/IR7T1Y6mCG0LY8+CMGw02VdKcyTsvvmex9bmc=,iv:NYB6gLjawUUeV7u0eaScD2eVgPedPpc2bB5KuWR7cxQ=,tag:SKINL/5pZiq3o/qywbuE8Q==,type:str]
|
||||
pgp: []
|
||||
encrypted_regex: ^(data|stringData)$
|
||||
version: 3.9.2
|
||||
Loading…
Add table
Add a link
Reference in a new issue