From 6bab4ff3a72a9057888b906d91417dfb9ab4d9da Mon Sep 17 00:00:00 2001 From: Henrique Lobao Date: Fri, 14 Jun 2024 14:41:54 -0300 Subject: [PATCH 01/12] Add EKS Cluster Compositions using upbound-aws-provider --- .../eks/cluster-basic/definition.yaml | 94 ++ .../eks/cluster-basic/eks.yaml | 335 +++++ .../eks/cluster-basic/kustomization.yaml | 5 + .../eks/cluster-with-extras/definition.yaml | 104 ++ .../eks/cluster-with-extras/eks.yaml | 1188 +++++++++++++++++ .../cluster-with-extras/kustomization.yaml | 5 + 6 files changed, 1731 insertions(+) create mode 100644 compositions/upbound-aws-provider/eks/cluster-basic/definition.yaml create mode 100644 compositions/upbound-aws-provider/eks/cluster-basic/eks.yaml create mode 100644 compositions/upbound-aws-provider/eks/cluster-basic/kustomization.yaml create mode 100644 compositions/upbound-aws-provider/eks/cluster-with-extras/definition.yaml create mode 100644 compositions/upbound-aws-provider/eks/cluster-with-extras/eks.yaml create mode 100644 compositions/upbound-aws-provider/eks/cluster-with-extras/kustomization.yaml diff --git a/compositions/upbound-aws-provider/eks/cluster-basic/definition.yaml b/compositions/upbound-aws-provider/eks/cluster-basic/definition.yaml new file mode 100644 index 00000000..c67da146 --- /dev/null +++ b/compositions/upbound-aws-provider/eks/cluster-basic/definition.yaml @@ -0,0 +1,94 @@ +apiVersion: apiextensions.crossplane.io/v1 +kind: CompositeResourceDefinition +metadata: + name: xekss.awsblueprints.io +spec: + defaultCompositionRef: + name: xeks.awsblueprints.io + connectionSecretKeys: + - kubeconfig + group: awsblueprints.io + names: + kind: XEks + plural: xekss + claimNames: + kind: Eks + plural: ekss + versions: + - name: v1alpha1 + served: true + referenceable: true + schema: + openAPIV3Schema: + type: object + properties: + spec: + type: object + properties: + id: + type: string + description: ID of this Cluster that other objects will use to refer to it. + providerConfigName: + description: Name of the Crossplane ProviderConfig to use for provisioning resources. + type: string + region: + description: AWS Region where resources will be deployed. + type: string + authenticationMode: + description: Authentication mode for the EKS cluster. + type: string + default: API + bootstrapClusterCreatorAdminPermissions: + description: Whether or not to bootstrap the access config values to the EKS cluster. Default is true. + type: boolean + default: true + enabledClusterLogTypes: + description: List of the desired control plane logging to enable. For more information, see Amazon EKS Control Plane Logging. + type: array + items: + type: string + default: + - api + - audit + - authenticator + - controllerManager + - scheduler + endpointPrivateAccess: + description: Whether the Amazon EKS private API server endpoint is enabled. Default is false. + type: boolean + default: false + endpointPublicAccess: + description: Whether the Amazon EKS public API server endpoint is enabled. Default is true. + type: boolean + default: true + subnets: + description: Subnets for the EKS cluster and node groups. + type: array + items: + type: string + version: + description: Kubernetes version for the EKS cluster. + type: string + default: "1.29" + writeConnectionSecretToRef: + description: Reference to a Secret where connection details should be written. + type: object + properties: + name: + type: string + description: The name of the secret. + deletionPolicy: + description: Deletion policy for the resources. 'Delete' will remove all resources, 'Orphan' will only remove the Kubernetes resource and leave cloud resources. + type: string + enum: + - Delete + - Orphan + default: Delete + status: + description: A Status represents the observed state + properties: + eks: + description: Freeform field containing status information for eks + type: object + x-kubernetes-preserve-unknown-fields: true + type: object diff --git a/compositions/upbound-aws-provider/eks/cluster-basic/eks.yaml b/compositions/upbound-aws-provider/eks/cluster-basic/eks.yaml new file mode 100644 index 00000000..31651919 --- /dev/null +++ b/compositions/upbound-aws-provider/eks/cluster-basic/eks.yaml @@ -0,0 +1,335 @@ +apiVersion: apiextensions.crossplane.io/v1 +kind: Composition +metadata: + name: xeks.awsblueprints.io + labels: + provider: aws +spec: + compositeTypeRef: + apiVersion: awsblueprints.io/v1alpha1 + kind: XEks + patchSets: + - name: common-parameters-global + patches: + - type: FromCompositeFieldPath + fromFieldPath: spec.providerConfigName + toFieldPath: spec.providerConfigRef.name + - type: FromCompositeFieldPath + fromFieldPath: spec.deletionPolicy + toFieldPath: spec.deletionPolicy + - name: common-parameters-regional + patches: + - type: FromCompositeFieldPath + fromFieldPath: spec.providerConfigName + toFieldPath: spec.providerConfigRef.name + - type: FromCompositeFieldPath + fromFieldPath: spec.deletionPolicy + toFieldPath: spec.deletionPolicy + - type: FromCompositeFieldPath + fromFieldPath: spec.region + toFieldPath: spec.forProvider.region + resources: + - name: clusterRole + base: + apiVersion: iam.aws.upbound.io/v1beta1 + kind: Role + metadata: + labels: + role: cluster + spec: + forProvider: + assumeRolePolicy: | + { + "Version": "2012-10-17", + "Statement": [ + { + "Effect": "Allow", + "Principal": { + "Service": "eks.amazonaws.com" + }, + "Action": "sts:AssumeRole" + } + ] + } + patches: + - type: PatchSet + patchSetName: common-parameters-global + - fromFieldPath: "status.atProvider.arn" + toFieldPath: "status.eks.clusterRoleArn" + type: ToCompositeFieldPath + - fromFieldPath: status.atProvider.arn + policy: + fromFieldPath: Required + toFieldPath: status.eks.accountId + transforms: + - string: + regexp: + group: 1 + match: arn:aws:iam::(\d+):.* + type: Regexp + type: string + type: ToCompositeFieldPath + + - name: clusterRolePolicyAttachment + base: + apiVersion: iam.aws.upbound.io/v1beta1 + kind: RolePolicyAttachment + spec: + forProvider: + policyArn: arn:aws:iam::aws:policy/AmazonEKSClusterPolicy + roleSelector: + matchControllerRef: true + matchLabels: + role: cluster + patches: + - type: PatchSet + patchSetName: common-parameters-global + + - name: kubernetesCluster + base: + apiVersion: eks.aws.upbound.io/v1beta1 + kind: Cluster + spec: + forProvider: + enabledClusterLogTypes: [] + region: "" + roleArnSelector: + matchControllerRef: true + matchLabels: + role: cluster + vpcConfig: + - endpointPrivateAccess: false + endpointPublicAccess: true + subnetIds: [] + patches: + - type: PatchSet + patchSetName: common-parameters-regional + - fromFieldPath: "spec.version" + toFieldPath: "spec.forProvider.version" + - fromFieldPath: "spec.authenticationMode" + toFieldPath: "spec.forProvider.accessConfig[0].authenticationMode" + - fromFieldPath: "spec.bootstrapClusterCreatorAdminPermissions" + toFieldPath: "spec.forProvider.accessConfig[0].bootstrapClusterCreatorAdminPermissions" + - fromFieldPath: "spec.enabledClusterLogTypes" + toFieldPath: "spec.forProvider.enabledClusterLogTypes" + - fromFieldPath: "spec.endpointPrivateAccess" + toFieldPath: "spec.forProvider.vpcConfig[0].endpointPrivateAccess" + - fromFieldPath: "spec.endpointPublicAccess" + toFieldPath: "spec.forProvider.vpcConfig[0].endpointPublicAccess" + - fromFieldPath: "spec.subnets" + toFieldPath: "spec.forProvider.vpcConfig[0].subnetIds" + policy: + fromFieldPath: Required + - fromFieldPath: status.atProvider.identity[0].oidc[0].issuer + policy: + fromFieldPath: Optional + toFieldPath: status.eks.oidc + type: ToCompositeFieldPath + - fromFieldPath: status.atProvider.identity[0].oidc[0].issuer + policy: + fromFieldPath: Optional + toFieldPath: status.eks.oidcUri + transforms: + - string: + trim: https:// + type: TrimPrefix + type: string + type: ToCompositeFieldPath + - fromFieldPath: status.atProvider.vpcConfig[0].clusterSecurityGroupId + policy: + fromFieldPath: Optional + toFieldPath: status.eks.clusterSecurityGroupId + type: ToCompositeFieldPath + + - name: clusterSecurityGroupImport + base: + apiVersion: ec2.aws.upbound.io/v1beta1 + kind: SecurityGroup + patches: + - type: PatchSet + patchSetName: common-parameters-regional + - fromFieldPath: status.eks.clusterSecurityGroupId + policy: + fromFieldPath: Required + toFieldPath: metadata.annotations[crossplane.io/external-name] + type: FromCompositeFieldPath + - fromFieldPath: spec.id + toFieldPath: spec.forProvider.tags[eks.aws.platform.upbound.io/discovery] + + - name: kubernetesClusterAuth + base: + apiVersion: eks.aws.upbound.io/v1beta1 + kind: ClusterAuth + spec: + forProvider: + refreshPeriod: "2m0s" + clusterNameSelector: + matchControllerRef: true + connectionDetails: + - fromConnectionSecretKey: kubeconfig + name: kubeconfig + type: FromConnectionSecretKey + patches: + - type: PatchSet + patchSetName: common-parameters-regional + - fromFieldPath: "spec.id" + toFieldPath: "spec.writeConnectionSecretToRef.namespace" + type: FromCompositeFieldPath + - fromFieldPath: "metadata.uid" + toFieldPath: "spec.writeConnectionSecretToRef.name" + transforms: + - type: string + string: + fmt: "%s-ekscluster" + type: Format + type: FromCompositeFieldPath + + - name: nodegroupRole + base: + apiVersion: iam.aws.upbound.io/v1beta1 + kind: Role + metadata: + labels: + role: nodegroup + spec: + forProvider: + assumeRolePolicy: | + { + "Version": "2012-10-17", + "Statement": [ + { + "Effect": "Allow", + "Principal": { + "Service": [ + "ec2.amazonaws.com" + ] + }, + "Action": [ + "sts:AssumeRole" + ] + } + ] + } + patches: + - type: PatchSet + patchSetName: common-parameters-global + - fromFieldPath: "status.atProvider.arn" + toFieldPath: "status.eks.nodeGroupRoleArn" + type: ToCompositeFieldPath + + - name: nodegroupWorkerNodePolicyAttachment + base: + apiVersion: iam.aws.upbound.io/v1beta1 + kind: RolePolicyAttachment + spec: + forProvider: + policyArn: arn:aws:iam::aws:policy/AmazonEKSWorkerNodePolicy + roleSelector: + matchControllerRef: true + matchLabels: + role: nodegroup + patches: + - type: PatchSet + patchSetName: common-parameters-global + + - name: nodegroupCniPolicyAttachment + base: + apiVersion: iam.aws.upbound.io/v1beta1 + kind: RolePolicyAttachment + spec: + forProvider: + policyArn: arn:aws:iam::aws:policy/AmazonEKS_CNI_Policy + roleSelector: + matchControllerRef: true + matchLabels: + role: nodegroup + patches: + - type: PatchSet + patchSetName: common-parameters-global + + - name: ebsCsiRolePolicyAttachment + base: + apiVersion: iam.aws.upbound.io/v1beta1 + kind: RolePolicyAttachment + spec: + forProvider: + policyArn: arn:aws:iam::aws:policy/service-role/AmazonEBSCSIDriverPolicy + roleSelector: + matchControllerRef: true + matchLabels: + role: nodegroup + patches: + - type: PatchSet + patchSetName: common-parameters-global + + - name: containerRegistryRolePolicyAttachment + base: + apiVersion: iam.aws.upbound.io/v1beta1 + kind: RolePolicyAttachment + spec: + forProvider: + policyArn: arn:aws:iam::aws:policy/AmazonEC2ContainerRegistryReadOnly + roleSelector: + matchControllerRef: true + matchLabels: + role: nodegroup + patches: + - type: PatchSet + patchSetName: common-parameters-global + + - name: nodegroup + base: + apiVersion: eks.aws.upbound.io/v1beta1 + kind: NodeGroup + spec: + forProvider: + region: "" + clusterNameSelector: + matchControllerRef: true + nodeRoleArnSelector: + matchControllerRef: true + matchLabels: + role: nodegroup + scalingConfig: + - desiredSize: 3 + minSize: 1 + maxSize: 6 + subnetIds: [] + providerConfigRef: + name: "" + patches: + - type: PatchSet + patchSetName: common-parameters-regional + - fromFieldPath: "spec.subnets" + toFieldPath: "spec.forProvider.subnetIds" + policy: + fromFieldPath: Required + - fromFieldPath: status.atProvider.clusterName + policy: + fromFieldPath: Optional + toFieldPath: status.eks.clusterName + type: ToCompositeFieldPath + + - name: oidcProvider + base: + apiVersion: iam.aws.upbound.io/v1beta1 + kind: OpenIDConnectProvider + spec: + forProvider: + clientIdList: + - sts.amazonaws.com + thumbprintList: + - 9e99a48a9960b14926bb7f3b02e22da2b0ab7280 + patches: + - type: PatchSet + patchSetName: common-parameters-global + - fromFieldPath: status.eks.oidc + policy: + fromFieldPath: Required + toFieldPath: spec.forProvider.url + type: FromCompositeFieldPath + - fromFieldPath: status.atProvider.arn + policy: + fromFieldPath: Optional + toFieldPath: status.eks.oidcArn + type: ToCompositeFieldPath diff --git a/compositions/upbound-aws-provider/eks/cluster-basic/kustomization.yaml b/compositions/upbound-aws-provider/eks/cluster-basic/kustomization.yaml new file mode 100644 index 00000000..7eff6b18 --- /dev/null +++ b/compositions/upbound-aws-provider/eks/cluster-basic/kustomization.yaml @@ -0,0 +1,5 @@ +apiVersion: kustomize.config.k8s.io/v1beta1 +kind: Kustomization +resources: +- definition.yaml +- eks.yaml diff --git a/compositions/upbound-aws-provider/eks/cluster-with-extras/definition.yaml b/compositions/upbound-aws-provider/eks/cluster-with-extras/definition.yaml new file mode 100644 index 00000000..0ab55f16 --- /dev/null +++ b/compositions/upbound-aws-provider/eks/cluster-with-extras/definition.yaml @@ -0,0 +1,104 @@ +apiVersion: apiextensions.crossplane.io/v1 +kind: CompositeResourceDefinition +metadata: + name: xekss.awsblueprints.io +spec: + defaultCompositionRef: + name: xeks.awsblueprints.io + connectionSecretKeys: + - kubeconfig + group: awsblueprints.io + names: + kind: XEks + plural: xekss + claimNames: + kind: Eks + plural: ekss + versions: + - name: v1alpha1 + served: true + referenceable: true + schema: + openAPIV3Schema: + type: object + properties: + spec: + type: object + properties: + id: + type: string + description: ID of this Cluster that other objects will use to refer to it. + providerConfigName: + description: Name of the Crossplane ProviderConfig to use for provisioning resources. + type: string + region: + description: AWS Region where resources will be deployed. + type: string + authenticationMode: + description: Authentication mode for the EKS cluster. + type: string + default: API + bootstrapClusterCreatorAdminPermissions: + description: Whether or not to bootstrap the access config values to the EKS cluster. Default is true. + type: boolean + default: true + enabledClusterLogTypes: + description: List of the desired control plane logging to enable. For more information, see Amazon EKS Control Plane Logging. + type: array + items: + type: string + default: + - api + - audit + - authenticator + - controllerManager + - scheduler + endpointPrivateAccess: + description: Whether the Amazon EKS private API server endpoint is enabled. Default is false. + type: boolean + default: false + endpointPublicAccess: + description: Whether the Amazon EKS public API server endpoint is enabled. Default is true. + type: boolean + default: true + iam: + type: object + description: IAM configuration to connect as ClusterAdmin. + properties: + clusterAdminRoleArn: + description: The IAM Role ARN to connect as ClusterAdmin. + type: string + clusterAdminUserArn: + description: The IAM User ARN to connect as ClusterAdmin. + type: string + subnets: + description: Subnets for the EKS cluster and node groups. + type: array + items: + type: string + version: + description: Kubernetes version for the EKS cluster. + type: string + default: "1.29" + writeConnectionSecretToRef: + description: Reference to a Secret where connection details should be written. + type: object + properties: + name: + type: string + description: The name of the secret. + deletionPolicy: + description: Deletion policy for the resources. 'Delete' will remove all resources, 'Orphan' will only remove the Kubernetes resource and leave cloud resources. + type: string + enum: + - Delete + - Orphan + default: Delete + status: + description: A Status represents the observed state + properties: + eks: + description: Freeform field containing status information for eks + type: object + x-kubernetes-preserve-unknown-fields: true + type: object diff --git a/compositions/upbound-aws-provider/eks/cluster-with-extras/eks.yaml b/compositions/upbound-aws-provider/eks/cluster-with-extras/eks.yaml new file mode 100644 index 00000000..4e573be1 --- /dev/null +++ b/compositions/upbound-aws-provider/eks/cluster-with-extras/eks.yaml @@ -0,0 +1,1188 @@ +apiVersion: apiextensions.crossplane.io/v1 +kind: Composition +metadata: + name: xeks.awsblueprints.io + labels: + provider: aws +spec: + compositeTypeRef: + apiVersion: awsblueprints.io/v1alpha1 + kind: XEks + patchSets: + - name: common-parameters-global + patches: + - type: FromCompositeFieldPath + fromFieldPath: spec.providerConfigName + toFieldPath: spec.providerConfigRef.name + - type: FromCompositeFieldPath + fromFieldPath: spec.deletionPolicy + toFieldPath: spec.deletionPolicy + - name: common-parameters-regional + patches: + - type: FromCompositeFieldPath + fromFieldPath: spec.providerConfigName + toFieldPath: spec.providerConfigRef.name + - type: FromCompositeFieldPath + fromFieldPath: spec.deletionPolicy + toFieldPath: spec.deletionPolicy + - type: FromCompositeFieldPath + fromFieldPath: spec.region + toFieldPath: spec.forProvider.region + resources: + - name: clusterRole + base: + apiVersion: iam.aws.upbound.io/v1beta1 + kind: Role + metadata: + labels: + role: cluster + spec: + forProvider: + assumeRolePolicy: | + { + "Version": "2012-10-17", + "Statement": [ + { + "Effect": "Allow", + "Principal": { + "Service": "eks.amazonaws.com" + }, + "Action": "sts:AssumeRole" + } + ] + } + patches: + - type: PatchSet + patchSetName: common-parameters-global + - fromFieldPath: "status.atProvider.arn" + toFieldPath: "status.eks.clusterRoleArn" + type: ToCompositeFieldPath + - fromFieldPath: status.atProvider.arn + policy: + fromFieldPath: Required + toFieldPath: status.eks.accountId + transforms: + - string: + regexp: + group: 1 + match: arn:aws:iam::(\d+):.* + type: Regexp + type: string + type: ToCompositeFieldPath + + - name: clusterRolePolicyAttachment + base: + apiVersion: iam.aws.upbound.io/v1beta1 + kind: RolePolicyAttachment + spec: + forProvider: + policyArn: arn:aws:iam::aws:policy/AmazonEKSClusterPolicy + roleSelector: + matchControllerRef: true + matchLabels: + role: cluster + patches: + - type: PatchSet + patchSetName: common-parameters-global + + - name: clusterEncriptionKey + base: + apiVersion: kms.aws.upbound.io/v1beta1 + kind: Key + spec: + forProvider: + region: "" + description: "KMS key used to encrypt the EKS cluster" + customerMasterKeySpec: SYMMETRIC_DEFAULT + enableKeyRotation: true + policy: "" + patches: + - type: PatchSet + patchSetName: common-parameters-regional + - combine: + strategy: string + string: + fmt: | + { + "Version": "2012-10-17", + "Id": "key-default-1", + "Statement": [ + { + "Sid": "Enable IAM User Permissions", + "Effect": "Allow", + "Principal": { + "AWS": "arn:aws:iam::%s:root" + }, + "Action": "kms:*", + "Resource": "*" + }, + { + "Sid": "Allow access for Key Administrators", + "Effect": "Allow", + "Principal": { + "AWS": [ + "%s" + ] + }, + "Action": [ + "kms:Create*", + "kms:Describe*", + "kms:Enable*", + "kms:List*", + "kms:Put*", + "kms:Update*", + "kms:Revoke*", + "kms:Disable*", + "kms:Get*", + "kms:Delete*", + "kms:ScheduleKeyDeletion", + "kms:CancelKeyDeletion" + ], + "Resource": "*" + }, + { + "Sid": "Allow use of the key", + "Effect": "Allow", + "Principal": { + "AWS": "%s" + }, + "Action": [ + "kms:Encrypt", + "kms:Decrypt", + "kms:ReEncrypt*", + "kms:GenerateDataKey*", + "kms:DescribeKey" + ], + "Resource": "*" + } + ] + } + variables: + - fromFieldPath: status.eks.accountId + - fromFieldPath: spec.iam.clusterAdminRoleArn + - fromFieldPath: status.eks.clusterRoleArn + policy: + fromFieldPath: Required + toFieldPath: spec.forProvider.policy + type: CombineFromComposite + - fromFieldPath: status.atProvider.arn + toFieldPath: status.eks.clusterKeyArn + type: ToCompositeFieldPath + + - name: clusterEncriptionKeyAlias + base: + apiVersion: kms.aws.upbound.io/v1beta1 + kind: Alias + spec: + forProvider: + region: "" + targetKeyId: "" + patches: + - type: PatchSet + patchSetName: common-parameters-regional + - fromFieldPath: status.eks.clusterKeyArn + toFieldPath: spec.forProvider.targetKeyId + type: FromCompositeFieldPath + + - name: kubernetesCluster + base: + apiVersion: eks.aws.upbound.io/v1beta1 + kind: Cluster + spec: + forProvider: + enabledClusterLogTypes: [] + encryptionConfig: + - resources: + - secrets + provider: + - keyArn: "" + region: "" + roleArnSelector: + matchControllerRef: true + matchLabels: + role: cluster + vpcConfig: + - endpointPrivateAccess: false + endpointPublicAccess: true + subnetIds: [] + patches: + - type: PatchSet + patchSetName: common-parameters-regional + - fromFieldPath: "spec.version" + toFieldPath: "spec.forProvider.version" + - fromFieldPath: "spec.authenticationMode" + toFieldPath: "spec.forProvider.accessConfig[0].authenticationMode" + - fromFieldPath: "spec.bootstrapClusterCreatorAdminPermissions" + toFieldPath: "spec.forProvider.accessConfig[0].bootstrapClusterCreatorAdminPermissions" + - fromFieldPath: "spec.enabledClusterLogTypes" + toFieldPath: "spec.forProvider.enabledClusterLogTypes" + - fromFieldPath: "spec.endpointPrivateAccess" + toFieldPath: "spec.forProvider.vpcConfig[0].endpointPrivateAccess" + - fromFieldPath: "spec.endpointPublicAccess" + toFieldPath: "spec.forProvider.vpcConfig[0].endpointPublicAccess" + - fromFieldPath: "spec.subnets" + toFieldPath: "spec.forProvider.vpcConfig[0].subnetIds" + policy: + fromFieldPath: Required + - fromFieldPath: status.atProvider.identity[0].oidc[0].issuer + policy: + fromFieldPath: Optional + toFieldPath: status.eks.oidc + type: ToCompositeFieldPath + - fromFieldPath: status.atProvider.identity[0].oidc[0].issuer + policy: + fromFieldPath: Optional + toFieldPath: status.eks.oidcUri + transforms: + - string: + trim: https:// + type: TrimPrefix + type: string + type: ToCompositeFieldPath + - fromFieldPath: status.atProvider.vpcConfig[0].clusterSecurityGroupId + policy: + fromFieldPath: Optional + toFieldPath: status.eks.clusterSecurityGroupId + type: ToCompositeFieldPath + - fromFieldPath: "status.eks.clusterKeyArn" + policy: + fromFieldPath: Required + toFieldPath: spec.forProvider.encryptionConfig[0].provider[0].keyArn + type: FromCompositeFieldPath + + - name: clusterSecurityGroupImport + base: + apiVersion: ec2.aws.upbound.io/v1beta1 + kind: SecurityGroup + patches: + - type: PatchSet + patchSetName: common-parameters-regional + - fromFieldPath: status.eks.clusterSecurityGroupId + policy: + fromFieldPath: Required + toFieldPath: metadata.annotations[crossplane.io/external-name] + type: FromCompositeFieldPath + - fromFieldPath: spec.id + toFieldPath: spec.forProvider.tags[eks.aws.platform.upbound.io/discovery] + + - name: kubernetesClusterAuth + base: + apiVersion: eks.aws.upbound.io/v1beta1 + kind: ClusterAuth + spec: + forProvider: + refreshPeriod: "2m0s" + clusterNameSelector: + matchControllerRef: true + connectionDetails: + - fromConnectionSecretKey: kubeconfig + name: kubeconfig + type: FromConnectionSecretKey + patches: + - type: PatchSet + patchSetName: common-parameters-regional + - fromFieldPath: "spec.id" + toFieldPath: "spec.writeConnectionSecretToRef.namespace" + type: FromCompositeFieldPath + - fromFieldPath: "metadata.uid" + toFieldPath: "spec.writeConnectionSecretToRef.name" + transforms: + - type: string + string: + fmt: "%s-ekscluster" + type: Format + type: FromCompositeFieldPath + + - name: nodegroupRole + base: + apiVersion: iam.aws.upbound.io/v1beta1 + kind: Role + metadata: + labels: + role: nodegroup + spec: + forProvider: + assumeRolePolicy: | + { + "Version": "2012-10-17", + "Statement": [ + { + "Effect": "Allow", + "Principal": { + "Service": [ + "ec2.amazonaws.com" + ] + }, + "Action": [ + "sts:AssumeRole" + ] + } + ] + } + patches: + - type: PatchSet + patchSetName: common-parameters-global + - fromFieldPath: "status.atProvider.arn" + toFieldPath: "status.eks.nodeGroupRoleArn" + type: ToCompositeFieldPath + + - name: nodegroupWorkerNodePolicyAttachment + base: + apiVersion: iam.aws.upbound.io/v1beta1 + kind: RolePolicyAttachment + spec: + forProvider: + policyArn: arn:aws:iam::aws:policy/AmazonEKSWorkerNodePolicy + roleSelector: + matchControllerRef: true + matchLabels: + role: nodegroup + patches: + - type: PatchSet + patchSetName: common-parameters-global + + - name: nodegroupCniPolicyAttachment + base: + apiVersion: iam.aws.upbound.io/v1beta1 + kind: RolePolicyAttachment + spec: + forProvider: + policyArn: arn:aws:iam::aws:policy/AmazonEKS_CNI_Policy + roleSelector: + matchControllerRef: true + matchLabels: + role: nodegroup + patches: + - type: PatchSet + patchSetName: common-parameters-global + + - name: ebsCsiRolePolicyAttachment + base: + apiVersion: iam.aws.upbound.io/v1beta1 + kind: RolePolicyAttachment + spec: + forProvider: + policyArn: arn:aws:iam::aws:policy/service-role/AmazonEBSCSIDriverPolicy + roleSelector: + matchControllerRef: true + matchLabels: + role: nodegroup + patches: + - type: PatchSet + patchSetName: common-parameters-global + + - name: containerRegistryRolePolicyAttachment + base: + apiVersion: iam.aws.upbound.io/v1beta1 + kind: RolePolicyAttachment + spec: + forProvider: + policyArn: arn:aws:iam::aws:policy/AmazonEC2ContainerRegistryReadOnly + roleSelector: + matchControllerRef: true + matchLabels: + role: nodegroup + patches: + - type: PatchSet + patchSetName: common-parameters-global + + - name: nodegroup + base: + apiVersion: eks.aws.upbound.io/v1beta1 + kind: NodeGroup + spec: + forProvider: + region: "" + clusterNameSelector: + matchControllerRef: true + nodeRoleArnSelector: + matchControllerRef: true + matchLabels: + role: nodegroup + scalingConfig: + - desiredSize: 3 + minSize: 1 + maxSize: 6 + subnetIds: [] + providerConfigRef: + name: "" + patches: + - type: PatchSet + patchSetName: common-parameters-regional + - fromFieldPath: "spec.subnets" + toFieldPath: "spec.forProvider.subnetIds" + policy: + fromFieldPath: Required + - fromFieldPath: status.atProvider.clusterName + policy: + fromFieldPath: Optional + toFieldPath: status.eks.clusterName + type: ToCompositeFieldPath + + - name: ebsCsiAddonRole + base: + apiVersion: iam.aws.upbound.io/v1beta1 + kind: Role + metadata: + labels: + role: ebsCsiAddon + spec: + forProvider: + assumeRolePolicy: "" + patches: + - type: PatchSet + patchSetName: common-parameters-global + - combine: + strategy: string + string: + fmt: | + { + "Version": "2012-10-17", + "Statement": [ + { + "Effect": "Allow", + "Principal": { + "Federated": "%s" + }, + "Action": "sts:AssumeRoleWithWebIdentity", + "Condition": { + "StringEquals": { + "%s:sub": "system:serviceaccount:kube-system:ebs-csi-controller-sa", + "%s:aud": "sts.amazonaws.com" + } + } + } + ] + } + variables: + - fromFieldPath: status.eks.oidcArn + - fromFieldPath: status.eks.oidcUri + - fromFieldPath: status.eks.oidcUri + policy: + fromFieldPath: Required + toFieldPath: spec.forProvider.assumeRolePolicy + type: CombineFromComposite + + - name: ebsCsiAddonRolePolicyAttachment + base: + apiVersion: iam.aws.upbound.io/v1beta1 + kind: RolePolicyAttachment + spec: + forProvider: + policyArn: arn:aws:iam::aws:policy/service-role/AmazonEBSCSIDriverPolicy + roleSelector: + matchControllerRef: true + matchLabels: + role: ebsCsiAddon + patches: + - type: PatchSet + patchSetName: common-parameters-global + + - name: ebsCsiAddon + base: + apiVersion: eks.aws.upbound.io/v1beta1 + kind: Addon + spec: + forProvider: + addonName: aws-ebs-csi-driver + clusterNameSelector: + matchControllerRef: true + serviceAccountRoleArnSelector: + matchControllerRef: true + matchLabels: + role: ebsCsiAddon + patches: + - type: PatchSet + patchSetName: common-parameters-regional + - fromFieldPath: status.eks.clusterName + policy: + fromFieldPath: Required + toFieldPath: metadata.annotations[crossplane.io/external-name] + transforms: + - string: + fmt: "%s:aws-ebs-csi-driver" + type: Format + type: string + type: FromCompositeFieldPath + + - name: cniAddon + base: + apiVersion: eks.aws.upbound.io/v1beta1 + kind: Addon + spec: + forProvider: + addonName: vpc-cni + clusterNameSelector: + matchControllerRef: true + preserve: false + patches: + - type: PatchSet + patchSetName: common-parameters-regional + - fromFieldPath: status.eks.clusterName + policy: + fromFieldPath: Required + toFieldPath: metadata.annotations[crossplane.io/external-name] + transforms: + - string: + fmt: "%s:vpc-cni" + type: Format + type: string + type: FromCompositeFieldPath + + - name: corednsAddon + base: + apiVersion: eks.aws.upbound.io/v1beta1 + kind: Addon + spec: + forProvider: + addonName: coredns + clusterNameSelector: + matchControllerRef: true + preserve: false + patches: + - type: PatchSet + patchSetName: common-parameters-regional + - fromFieldPath: status.eks.clusterName + policy: + fromFieldPath: Required + toFieldPath: metadata.annotations[crossplane.io/external-name] + transforms: + - string: + fmt: "%s:coredns" + type: Format + type: string + type: FromCompositeFieldPath + + - name: kubeProxyAddon + base: + apiVersion: eks.aws.upbound.io/v1beta1 + kind: Addon + spec: + forProvider: + addonName: kube-proxy + clusterNameSelector: + matchControllerRef: true + preserve: false + patches: + - type: PatchSet + patchSetName: common-parameters-regional + - fromFieldPath: status.eks.clusterName + policy: + fromFieldPath: Required + toFieldPath: metadata.annotations[crossplane.io/external-name] + transforms: + - string: + fmt: "%s:kube-proxy" + type: Format + type: string + type: FromCompositeFieldPath + + - name: podIdentityAgentAddon + base: + apiVersion: eks.aws.upbound.io/v1beta1 + kind: Addon + spec: + forProvider: + addonName: eks-pod-identity-agent + clusterNameSelector: + matchControllerRef: true + preserve: false + patches: + - type: PatchSet + patchSetName: common-parameters-regional + - fromFieldPath: status.eks.clusterName + policy: + fromFieldPath: Required + toFieldPath: metadata.annotations[crossplane.io/external-name] + transforms: + - string: + fmt: "%s:eks-pod-identity-agent" + type: Format + type: string + type: FromCompositeFieldPath + + - name: csiSnapshotControllerAddon + base: + apiVersion: eks.aws.upbound.io/v1beta1 + kind: Addon + spec: + forProvider: + addonName: snapshot-controller + clusterNameSelector: + matchControllerRef: true + preserve: false + patches: + - type: PatchSet + patchSetName: common-parameters-regional + - fromFieldPath: status.eks.clusterName + policy: + fromFieldPath: Required + toFieldPath: metadata.annotations[crossplane.io/external-name] + transforms: + - string: + fmt: "%s:snapshot-controller" + type: Format + type: string + type: FromCompositeFieldPath + + - name: s3MountpointAddon + base: + apiVersion: eks.aws.upbound.io/v1beta1 + kind: Addon + spec: + forProvider: + addonName: aws-mountpoint-s3-csi-driver + clusterNameSelector: + matchControllerRef: true + preserve: false + patches: + - type: PatchSet + patchSetName: common-parameters-regional + - fromFieldPath: status.eks.clusterName + policy: + fromFieldPath: Required + toFieldPath: metadata.annotations[crossplane.io/external-name] + transforms: + - string: + fmt: "%s:aws-mountpoint-s3-csi-driver" + type: Format + type: string + type: FromCompositeFieldPath + + - name: efsCsiAddon + base: + apiVersion: eks.aws.upbound.io/v1beta1 + kind: Addon + spec: + forProvider: + addonName: aws-efs-csi-driver + clusterNameSelector: + matchControllerRef: true + preserve: false + patches: + - type: PatchSet + patchSetName: common-parameters-regional + - fromFieldPath: status.eks.clusterName + policy: + fromFieldPath: Required + toFieldPath: metadata.annotations[crossplane.io/external-name] + transforms: + - string: + fmt: "%s:aws-efs-csi-driver" + type: Format + type: string + type: FromCompositeFieldPath + + - name: oidcProvider + base: + apiVersion: iam.aws.upbound.io/v1beta1 + kind: OpenIDConnectProvider + spec: + forProvider: + clientIdList: + - sts.amazonaws.com + thumbprintList: + - 9e99a48a9960b14926bb7f3b02e22da2b0ab7280 + patches: + - type: PatchSet + patchSetName: common-parameters-global + - fromFieldPath: status.eks.oidc + policy: + fromFieldPath: Required + toFieldPath: spec.forProvider.url + type: FromCompositeFieldPath + - fromFieldPath: status.atProvider.arn + policy: + fromFieldPath: Optional + toFieldPath: status.eks.oidcArn + type: ToCompositeFieldPath + + - name: providerConfigHelm + base: + apiVersion: helm.crossplane.io/v1beta1 + kind: ProviderConfig + spec: + credentials: + source: Secret + secretRef: + name: "" + namespace: "" + key: kubeconfig + patches: + - fromFieldPath: spec.id + toFieldPath: spec.credentials.secretRef.namespace + - fromFieldPath: spec.id + toFieldPath: metadata.name + type: FromCompositeFieldPath + - fromFieldPath: metadata.uid + toFieldPath: spec.credentials.secretRef.name + transforms: + - string: + fmt: "%s-ekscluster" + type: Format + type: string + type: FromCompositeFieldPath + readinessChecks: + - type: None + + - name: providerConfigKubernetes + base: + apiVersion: kubernetes.crossplane.io/v1alpha1 + kind: ProviderConfig + spec: + credentials: + secretRef: + key: kubeconfig + source: Secret + patches: + - fromFieldPath: spec.id + toFieldPath: metadata.name + type: FromCompositeFieldPath + - fromFieldPath: spec.id + toFieldPath: spec.credentials.secretRef.namespace + - fromFieldPath: metadata.uid + toFieldPath: spec.credentials.secretRef.name + transforms: + - string: + fmt: "%s-ekscluster" + type: Format + type: string + type: FromCompositeFieldPath + readinessChecks: + - type: None + + - name: awsAuth + base: + apiVersion: kubernetes.crossplane.io/v1alpha2 + kind: Object + spec: + deletionPolicy: Orphan + forProvider: + manifest: + apiVersion: v1 + kind: ConfigMap + metadata: + name: aws-auth + namespace: kube-system + patches: + - fromFieldPath: spec.id + toFieldPath: spec.providerConfigRef.name + type: FromCompositeFieldPath + - fromFieldPath: spec.id + toFieldPath: metadata.name + transforms: + - string: + fmt: "%s-aws-auth" + type: Format + type: string + type: FromCompositeFieldPath + - combine: + strategy: string + string: + fmt: | + - groups: + - system:bootstrappers + - system:nodes + rolearn: %s + username: system:node:{{EC2PrivateDNSName}} + - groups: + - system:masters + rolearn: %s + username: adminrole + variables: + - fromFieldPath: status.eks.nodeGroupRoleArn + - fromFieldPath: spec.iam.clusterAdminRoleArn + policy: + fromFieldPath: Required + toFieldPath: spec.forProvider.manifest.data.mapRoles + type: CombineFromComposite + - combine: + strategy: string + string: + fmt: | + - groups: + - system:masters + userarn: %s + username: adminuser + variables: + - fromFieldPath: spec.iam.clusterAdminUserArn + policy: + fromFieldPath: Optional + toFieldPath: spec.forProvider.manifest.data.mapUsers + type: CombineFromComposite + + - name: awsLoadBalancerControllerAddonPolicy + base: + apiVersion: iam.aws.upbound.io/v1beta1 + kind: Policy + metadata: + labels: + policy: awsLoadBalancerControllerAddon + spec: + forProvider: + policy: | + { + "Version": "2012-10-17", + "Statement": [ + { + "Effect": "Allow", + "Action": [ + "iam:CreateServiceLinkedRole" + ], + "Resource": "*", + "Condition": { + "StringEquals": { + "iam:AWSServiceName": "elasticloadbalancing.amazonaws.com" + } + } + }, + { + "Effect": "Allow", + "Action": [ + "ec2:DescribeAccountAttributes", + "ec2:DescribeAddresses", + "ec2:DescribeAvailabilityZones", + "ec2:DescribeInternetGateways", + "ec2:DescribeVpcs", + "ec2:DescribeVpcPeeringConnections", + "ec2:DescribeSubnets", + "ec2:DescribeSecurityGroups", + "ec2:DescribeInstances", + "ec2:DescribeNetworkInterfaces", + "ec2:DescribeTags", + "ec2:GetCoipPoolUsage", + "ec2:DescribeCoipPools", + "elasticloadbalancing:DescribeLoadBalancers", + "elasticloadbalancing:DescribeLoadBalancerAttributes", + "elasticloadbalancing:DescribeListeners", + "elasticloadbalancing:DescribeListenerCertificates", + "elasticloadbalancing:DescribeSSLPolicies", + "elasticloadbalancing:DescribeRules", + "elasticloadbalancing:DescribeTargetGroups", + "elasticloadbalancing:DescribeTargetGroupAttributes", + "elasticloadbalancing:DescribeTargetHealth", + "elasticloadbalancing:DescribeTags", + "elasticloadbalancing:DescribeTrustStores" + ], + "Resource": "*" + }, + { + "Effect": "Allow", + "Action": [ + "cognito-idp:DescribeUserPoolClient", + "acm:ListCertificates", + "acm:DescribeCertificate", + "iam:ListServerCertificates", + "iam:GetServerCertificate", + "waf-regional:GetWebACL", + "waf-regional:GetWebACLForResource", + "waf-regional:AssociateWebACL", + "waf-regional:DisassociateWebACL", + "wafv2:GetWebACL", + "wafv2:GetWebACLForResource", + "wafv2:AssociateWebACL", + "wafv2:DisassociateWebACL", + "shield:GetSubscriptionState", + "shield:DescribeProtection", + "shield:CreateProtection", + "shield:DeleteProtection" + ], + "Resource": "*" + }, + { + "Effect": "Allow", + "Action": [ + "ec2:AuthorizeSecurityGroupIngress", + "ec2:RevokeSecurityGroupIngress" + ], + "Resource": "*" + }, + { + "Effect": "Allow", + "Action": [ + "ec2:CreateSecurityGroup" + ], + "Resource": "*" + }, + { + "Effect": "Allow", + "Action": [ + "ec2:CreateTags" + ], + "Resource": "arn:aws:ec2:*:*:security-group/*", + "Condition": { + "StringEquals": { + "ec2:CreateAction": "CreateSecurityGroup" + }, + "Null": { + "aws:RequestTag/elbv2.k8s.aws/cluster": "false" + } + } + }, + { + "Effect": "Allow", + "Action": [ + "ec2:CreateTags", + "ec2:DeleteTags" + ], + "Resource": "arn:aws:ec2:*:*:security-group/*", + "Condition": { + "Null": { + "aws:RequestTag/elbv2.k8s.aws/cluster": "true", + "aws:ResourceTag/elbv2.k8s.aws/cluster": "false" + } + } + }, + { + "Effect": "Allow", + "Action": [ + "ec2:AuthorizeSecurityGroupIngress", + "ec2:RevokeSecurityGroupIngress", + "ec2:DeleteSecurityGroup" + ], + "Resource": "*", + "Condition": { + "Null": { + "aws:ResourceTag/elbv2.k8s.aws/cluster": "false" + } + } + }, + { + "Effect": "Allow", + "Action": [ + "elasticloadbalancing:CreateLoadBalancer", + "elasticloadbalancing:CreateTargetGroup" + ], + "Resource": "*", + "Condition": { + "Null": { + "aws:RequestTag/elbv2.k8s.aws/cluster": "false" + } + } + }, + { + "Effect": "Allow", + "Action": [ + "elasticloadbalancing:CreateListener", + "elasticloadbalancing:DeleteListener", + "elasticloadbalancing:CreateRule", + "elasticloadbalancing:DeleteRule" + ], + "Resource": "*" + }, + { + "Effect": "Allow", + "Action": [ + "elasticloadbalancing:AddTags", + "elasticloadbalancing:RemoveTags" + ], + "Resource": [ + "arn:aws:elasticloadbalancing:*:*:targetgroup/*/*", + "arn:aws:elasticloadbalancing:*:*:loadbalancer/net/*/*", + "arn:aws:elasticloadbalancing:*:*:loadbalancer/app/*/*" + ], + "Condition": { + "Null": { + "aws:RequestTag/elbv2.k8s.aws/cluster": "true", + "aws:ResourceTag/elbv2.k8s.aws/cluster": "false" + } + } + }, + { + "Effect": "Allow", + "Action": [ + "elasticloadbalancing:AddTags", + "elasticloadbalancing:RemoveTags" + ], + "Resource": [ + "arn:aws:elasticloadbalancing:*:*:listener/net/*/*/*", + "arn:aws:elasticloadbalancing:*:*:listener/app/*/*/*", + "arn:aws:elasticloadbalancing:*:*:listener-rule/net/*/*/*", + "arn:aws:elasticloadbalancing:*:*:listener-rule/app/*/*/*" + ] + }, + { + "Effect": "Allow", + "Action": [ + "elasticloadbalancing:ModifyLoadBalancerAttributes", + "elasticloadbalancing:SetIpAddressType", + "elasticloadbalancing:SetSecurityGroups", + "elasticloadbalancing:SetSubnets", + "elasticloadbalancing:DeleteLoadBalancer", + "elasticloadbalancing:ModifyTargetGroup", + "elasticloadbalancing:ModifyTargetGroupAttributes", + "elasticloadbalancing:DeleteTargetGroup" + ], + "Resource": "*", + "Condition": { + "Null": { + "aws:ResourceTag/elbv2.k8s.aws/cluster": "false" + } + } + }, + { + "Effect": "Allow", + "Action": [ + "elasticloadbalancing:AddTags" + ], + "Resource": [ + "arn:aws:elasticloadbalancing:*:*:targetgroup/*/*", + "arn:aws:elasticloadbalancing:*:*:loadbalancer/net/*/*", + "arn:aws:elasticloadbalancing:*:*:loadbalancer/app/*/*" + ], + "Condition": { + "StringEquals": { + "elasticloadbalancing:CreateAction": [ + "CreateTargetGroup", + "CreateLoadBalancer" + ] + }, + "Null": { + "aws:RequestTag/elbv2.k8s.aws/cluster": "false" + } + } + }, + { + "Effect": "Allow", + "Action": [ + "elasticloadbalancing:RegisterTargets", + "elasticloadbalancing:DeregisterTargets" + ], + "Resource": "arn:aws:elasticloadbalancing:*:*:targetgroup/*/*" + }, + { + "Effect": "Allow", + "Action": [ + "elasticloadbalancing:SetWebAcl", + "elasticloadbalancing:ModifyListener", + "elasticloadbalancing:AddListenerCertificates", + "elasticloadbalancing:RemoveListenerCertificates", + "elasticloadbalancing:ModifyRule" + ], + "Resource": "*" + } + ] + } + patches: + - type: PatchSet + patchSetName: common-parameters-global + + - name: awsLoadBalancerControllerAddonRole + base: + apiVersion: iam.aws.upbound.io/v1beta1 + kind: Role + metadata: + labels: + role: awsLoadBalancerControllerAddon + spec: + forProvider: + assumeRolePolicy: "" + patches: + - type: PatchSet + patchSetName: common-parameters-global + - fromFieldPath: "status.atProvider.arn" + toFieldPath: "status.eks.awsLoadBalancerControllerAddonRoleArn" + type: ToCompositeFieldPath + - combine: + strategy: string + string: + fmt: | + { + "Version": "2012-10-17", + "Statement": [ + { + "Effect": "Allow", + "Principal": { + "Federated": "%s" + }, + "Action": "sts:AssumeRoleWithWebIdentity", + "Condition": { + "StringEquals": { + "%s:sub": "system:serviceaccount:kube-system:aws-load-balancer-controller-sa", + "%s:aud": "sts.amazonaws.com" + } + } + } + ] + } + variables: + - fromFieldPath: status.eks.oidcArn + - fromFieldPath: status.eks.oidcUri + - fromFieldPath: status.eks.oidcUri + policy: + fromFieldPath: Required + toFieldPath: spec.forProvider.assumeRolePolicy + type: CombineFromComposite + + - name: awsLoadBalancerControllerAddonRolePolicyAttachment + base: + apiVersion: iam.aws.upbound.io/v1beta1 + kind: RolePolicyAttachment + spec: + forProvider: + policyArnSelector: + matchControllerRef: true + matchLabels: + policy: awsLoadBalancerControllerAddon + roleSelector: + matchControllerRef: true + matchLabels: + role: awsLoadBalancerControllerAddon + patches: + - type: PatchSet + patchSetName: common-parameters-global + + - name: awsLoadBalancerControllerAddonServiceAccount + base: + apiVersion: kubernetes.crossplane.io/v1alpha2 + kind: Object + spec: + deletionPolicy: Orphan + forProvider: + manifest: + apiVersion: v1 + kind: ServiceAccount + metadata: + name: aws-load-balancer-controller-sa + namespace: kube-system + patches: + - fromFieldPath: spec.id + toFieldPath: spec.providerConfigRef.name + type: FromCompositeFieldPath + - fromFieldPath: status.eks.awsLoadBalancerControllerAddonRoleArn + toFieldPath: spec.forProvider.manifest.metadata.annotations[eks.amazonaws.com/role-arn] + type: FromCompositeFieldPath + policy: + fromFieldPath: Required + + - name: awsLoadBalancerControllerAddon + base: + apiVersion: helm.crossplane.io/v1beta1 + kind: Release + metadata: + annotations: + crossplane.io/external-name: aws-load-balancer-controller + spec: + forProvider: + chart: + name: aws-load-balancer-controller + repository: https://aws.github.io/eks-charts + version: 1.7.1 + namespace: kube-system + set: + - name: clusterName + value: "" + - name: serviceAccount.create + value: "false" + - name: serviceAccount.name + value: aws-load-balancer-controller-sa + values: + image: + pullPolicy: IfNotPresent + patches: + - fromFieldPath: spec.id + toFieldPath: spec.providerConfigRef.name + type: FromCompositeFieldPath + - fromFieldPath: status.eks.clusterName + toFieldPath: spec.forProvider.set[0].value + type: FromCompositeFieldPath diff --git a/compositions/upbound-aws-provider/eks/cluster-with-extras/kustomization.yaml b/compositions/upbound-aws-provider/eks/cluster-with-extras/kustomization.yaml new file mode 100644 index 00000000..7eff6b18 --- /dev/null +++ b/compositions/upbound-aws-provider/eks/cluster-with-extras/kustomization.yaml @@ -0,0 +1,5 @@ +apiVersion: kustomize.config.k8s.io/v1beta1 +kind: Kustomization +resources: +- definition.yaml +- eks.yaml From 1b81fb3a7b82ad0b9e2288bd80ca1ff1965c2313 Mon Sep 17 00:00:00 2001 From: Henrique Lobao Date: Tue, 2 Jul 2024 17:54:33 -0300 Subject: [PATCH 02/12] Add Claim example for EKS basic Cluster Composition --- .../eks/cluster-basic/argocd-eks-app.yaml | 17 ++++++++++ .../eks/cluster-basic/eks-cluster-basic.yaml | 33 +++++++++++++++++++ .../eks/cluster-basic/kustomization.yaml | 4 +++ 3 files changed, 54 insertions(+) create mode 100644 examples/upbound-aws-provider/composite-resources/eks/cluster-basic/argocd-eks-app.yaml create mode 100644 examples/upbound-aws-provider/composite-resources/eks/cluster-basic/eks-cluster-basic.yaml create mode 100644 examples/upbound-aws-provider/composite-resources/eks/cluster-basic/kustomization.yaml diff --git a/examples/upbound-aws-provider/composite-resources/eks/cluster-basic/argocd-eks-app.yaml b/examples/upbound-aws-provider/composite-resources/eks/cluster-basic/argocd-eks-app.yaml new file mode 100644 index 00000000..7fd104cb --- /dev/null +++ b/examples/upbound-aws-provider/composite-resources/eks/cluster-basic/argocd-eks-app.yaml @@ -0,0 +1,17 @@ +apiVersion: argoproj.io/v1alpha1 +kind: Application +metadata: + name: eks-app + namespace: argocd +spec: + destination: + namespace: default + server: https://kubernetes.default.svc + project: default + source: + path: examples/upbound-aws-provider/composite-resources/eks/cluster-basic/ + directory: + include: "eks-cluster-basic.yaml" + repoURL: https://github.com/hflobao/crossplane-on-eks.git + targetRevision: feat/add_eks_with_upbound_provider + syncPolicy: {} diff --git a/examples/upbound-aws-provider/composite-resources/eks/cluster-basic/eks-cluster-basic.yaml b/examples/upbound-aws-provider/composite-resources/eks/cluster-basic/eks-cluster-basic.yaml new file mode 100644 index 00000000..b779b9ed --- /dev/null +++ b/examples/upbound-aws-provider/composite-resources/eks/cluster-basic/eks-cluster-basic.yaml @@ -0,0 +1,33 @@ +--- +apiVersion: v1 +kind: Namespace +metadata: + name: crossplane-bootstrap +--- +apiVersion: awsblueprints.io/v1alpha1 +kind: Eks +metadata: + name: crossplane-bootstrap + namespace: crossplane-bootstrap +spec: + id: crossplane-bootstrap + region: us-east-1 + authenticationMode: API + bootstrapClusterCreatorAdminPermissions: true + enabledClusterLogTypes: + - api + - audit + - authenticator + - controllerManager + - scheduler + endpointPrivateAccess: true + endpointPublicAccess: true + deletionPolicy: "Delete" + providerConfigName: crossplane-provider-config + version: "1.30" + subnets: + - subnet-03f0f3bb1fa48e543 + - subnet-0be9b7544b1da2de1 + - subnet-016d2dee489d8ca48 + writeConnectionSecretToRef: + name: crossplane-bootstrap-kubeconfig diff --git a/examples/upbound-aws-provider/composite-resources/eks/cluster-basic/kustomization.yaml b/examples/upbound-aws-provider/composite-resources/eks/cluster-basic/kustomization.yaml new file mode 100644 index 00000000..4b9c5eef --- /dev/null +++ b/examples/upbound-aws-provider/composite-resources/eks/cluster-basic/kustomization.yaml @@ -0,0 +1,4 @@ +apiVersion: kustomize.config.k8s.io/v1beta1 +kind: Kustomization +bases: +- ../../../../../compositions/upbound-aws-provider/eks/cluster-basic From ca9d02bc262d53da2e3e1ed029098592543cb451 Mon Sep 17 00:00:00 2001 From: Henrique Lobao Date: Tue, 2 Jul 2024 20:05:39 -0300 Subject: [PATCH 03/12] Changing subnet IDs to match test environment --- .../eks/cluster-basic/eks-cluster-basic.yaml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/examples/upbound-aws-provider/composite-resources/eks/cluster-basic/eks-cluster-basic.yaml b/examples/upbound-aws-provider/composite-resources/eks/cluster-basic/eks-cluster-basic.yaml index b779b9ed..4437e13c 100644 --- a/examples/upbound-aws-provider/composite-resources/eks/cluster-basic/eks-cluster-basic.yaml +++ b/examples/upbound-aws-provider/composite-resources/eks/cluster-basic/eks-cluster-basic.yaml @@ -26,8 +26,8 @@ spec: providerConfigName: crossplane-provider-config version: "1.30" subnets: - - subnet-03f0f3bb1fa48e543 - - subnet-0be9b7544b1da2de1 - - subnet-016d2dee489d8ca48 + - subnet-02b9760c8bd073456 + - subnet-0c2c5a1cf23d4604e + - subnet-084a3cd4de4790113 writeConnectionSecretToRef: name: crossplane-bootstrap-kubeconfig From da59f6c7ea790ee7fc01ba55d3ab941ef6f74f09 Mon Sep 17 00:00:00 2001 From: Henrique Lobao Date: Tue, 2 Jul 2024 22:23:36 -0300 Subject: [PATCH 04/12] Change ArgoCD app to point to the upstream awslabs repository --- .../composite-resources/eks/cluster-basic/argocd-eks-app.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/examples/upbound-aws-provider/composite-resources/eks/cluster-basic/argocd-eks-app.yaml b/examples/upbound-aws-provider/composite-resources/eks/cluster-basic/argocd-eks-app.yaml index 7fd104cb..742d0957 100644 --- a/examples/upbound-aws-provider/composite-resources/eks/cluster-basic/argocd-eks-app.yaml +++ b/examples/upbound-aws-provider/composite-resources/eks/cluster-basic/argocd-eks-app.yaml @@ -12,6 +12,6 @@ spec: path: examples/upbound-aws-provider/composite-resources/eks/cluster-basic/ directory: include: "eks-cluster-basic.yaml" - repoURL: https://github.com/hflobao/crossplane-on-eks.git - targetRevision: feat/add_eks_with_upbound_provider + repoURL: https://github.com/awslabs/crossplane-on-eks.git + targetRevision: HEAD syncPolicy: {} From 0e0dbdee5690c439201a7d750ca72e0ec28af5fe Mon Sep 17 00:00:00 2001 From: Henrique Lobao Date: Tue, 2 Jul 2024 22:25:30 -0300 Subject: [PATCH 05/12] Changing Subnet IDs to generic/template values --- .../eks/cluster-basic/eks-cluster-basic.yaml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/examples/upbound-aws-provider/composite-resources/eks/cluster-basic/eks-cluster-basic.yaml b/examples/upbound-aws-provider/composite-resources/eks/cluster-basic/eks-cluster-basic.yaml index 4437e13c..33524bd3 100644 --- a/examples/upbound-aws-provider/composite-resources/eks/cluster-basic/eks-cluster-basic.yaml +++ b/examples/upbound-aws-provider/composite-resources/eks/cluster-basic/eks-cluster-basic.yaml @@ -26,8 +26,8 @@ spec: providerConfigName: crossplane-provider-config version: "1.30" subnets: - - subnet-02b9760c8bd073456 - - subnet-0c2c5a1cf23d4604e - - subnet-084a3cd4de4790113 + - subnet-aaaaaaaaaaaaaaaaa + - subnet-bbbbbbbbbbbbbbbbb + - subnet-ccccccccccccccccc writeConnectionSecretToRef: name: crossplane-bootstrap-kubeconfig From 8255c32e4d599dabe0f9b0f0a8a41f3841ca37e1 Mon Sep 17 00:00:00 2001 From: Henrique Lobao Date: Tue, 2 Jul 2024 22:26:45 -0300 Subject: [PATCH 06/12] Add Readme with usage description --- .../eks/cluster-basic/README.md | 75 +++++++++++++++++++ 1 file changed, 75 insertions(+) create mode 100644 examples/upbound-aws-provider/composite-resources/eks/cluster-basic/README.md diff --git a/examples/upbound-aws-provider/composite-resources/eks/cluster-basic/README.md b/examples/upbound-aws-provider/composite-resources/eks/cluster-basic/README.md new file mode 100644 index 00000000..8a1c3451 --- /dev/null +++ b/examples/upbound-aws-provider/composite-resources/eks/cluster-basic/README.md @@ -0,0 +1,75 @@ +# Example to deploy a basic EKS cluster with one nodegroup +This example provides a Claim that deploys an EKS Cluster with no Addons and a single Nodegroup. First, it applies the Crossplane XRDs and Composition. Then it applies an ArgoCD app that contains the Crossplane Claim. The Crossplane creates the EKS Cluster and Nodegroup resources. +As the Claim requires some input parameters from the target environment, to use it it's first required to fork the repository to your own account or copy it to a private repository. +Then edit the eks-cluster-basic.yaml file, providing the following informations: + - The Subnet IDs to provision the EKS Cluster control-plane private endpoints and the Nodegroup hosts. + - The ProviderConfig name that should be used to create the EKS Cluster. +In addition to that, it's also required to edit the 'argocd-eks-app.yaml' file, editing the following information: + - 'spec.source.repoURL' to point to your fork or private copy of the repository. + +## Pre-requisites + - [Upbound AWS Provider Crossplane Blueprint Examples](../../README.md) + + +### Deploy XRDs and Compositions +```shell +kubectl apply -k . +``` + +Verify the XRDs +```shell +kubectl get xrds +``` + +Expected output +``` +NAME ESTABLISHED OFFERED AGE +xekss.awsblueprints.io True True 5m4s +``` + +Verify the Compositions +```shell +kubectl get compositions +``` + +Expected output. Note: the output might contain more compositions but these are the ones uses by the claim in the next step +``` +NAME XR-KIND XR-APIVERSION AGE +xeks.awsblueprints.io XEks awsblueprints.io/v1alpha1 5m12s +``` + +### Validate `EnvironmentConfig` + +Crossplane `environmentconfig` named `cluster` is created by the bootstrap terraform code. Validate it exists and contains proper values +``` +kubectl get environmentconfig cluster -o yaml +``` +Expected output +``` +apiVersion: apiextensions.crossplane.io/v1alpha1 +kind: EnvironmentConfig +metadata: + name: cluster +data: + awsAccountID: + eksOIDC: +``` + +### Apply ArgoCD application +The applications contains the claim and the deployment. +``` +kubectl apply -f argocd-eks-app.yaml +``` + +### Navigate to the ArgoCD UI +Find the ArgoCD URL: +``` +kubectl -n argocd get svc argo-cd-argocd-server -o jsonpath='{.status.loadBalancer.ingress[0].hostname}' +``` +The username is `admin` and the password can be obtained by executing: +``` +kubectl -n argocd get secret argocd-initial-admin-secret -o jsonpath="{.data.password}" | base64 -d +``` + +### Sync the ArgoCD app and watch the eks-app come up. +![EKS App ArgoCD](../../diagrams/argocd-eks-app-sync.png) From d3f14272d276b0ab907874ea20fb81d3a63dfcb2 Mon Sep 17 00:00:00 2001 From: Henrique Lobao Date: Tue, 2 Jul 2024 22:28:37 -0300 Subject: [PATCH 07/12] Add image with ArgoCD eks-app sync desired state --- .../diagrams/argocd-eks-app-sync.png | Bin 0 -> 195590 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 examples/upbound-aws-provider/diagrams/argocd-eks-app-sync.png diff --git a/examples/upbound-aws-provider/diagrams/argocd-eks-app-sync.png b/examples/upbound-aws-provider/diagrams/argocd-eks-app-sync.png new file mode 100644 index 0000000000000000000000000000000000000000..0bad520d4852175263a7cf91e6e226b08f51bb32 GIT binary patch literal 195590 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

J|aeGlbxXAW!oG{7+8 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 Date: Tue, 2 Jul 2024 22:30:39 -0300 Subject: [PATCH 08/12] Add example Claim for the EKS with extras Composition --- .../eks/cluster-with-extras/README.md | 88 +++++++++++++++++++ .../cluster-with-extras/argocd-eks-app.yaml | 17 ++++ .../eks-cluster-with-extras.yaml | 36 ++++++++ .../cluster-with-extras/kustomization.yaml | 4 + 4 files changed, 145 insertions(+) create mode 100644 examples/upbound-aws-provider/composite-resources/eks/cluster-with-extras/README.md create mode 100644 examples/upbound-aws-provider/composite-resources/eks/cluster-with-extras/argocd-eks-app.yaml create mode 100644 examples/upbound-aws-provider/composite-resources/eks/cluster-with-extras/eks-cluster-with-extras.yaml create mode 100644 examples/upbound-aws-provider/composite-resources/eks/cluster-with-extras/kustomization.yaml diff --git a/examples/upbound-aws-provider/composite-resources/eks/cluster-with-extras/README.md b/examples/upbound-aws-provider/composite-resources/eks/cluster-with-extras/README.md new file mode 100644 index 00000000..da3eac1c --- /dev/null +++ b/examples/upbound-aws-provider/composite-resources/eks/cluster-with-extras/README.md @@ -0,0 +1,88 @@ +# Example to deploy a basic EKS cluster with one nodegroup and extra features +This example provides a Claim that deploys an EKS Cluster with some Addons and a single Nodegroup. First, it applies the Crossplane XRDs and Composition. Then it applies an ArgoCD app that contains the Crossplane Claim. The Crossplane creates the EKS Cluster, the Addons and Nodegroup resources. +In addition to the EKS Cluster control-plane and the Nodegroup, the following resources, Addons and features are also deployed: + - A KMS Key to be used on the cluster encryption for secrets. + - VPC CNI Addon + - EBS CSI Driver Addon + - CoreDNS Addon + - KubeProxyAddon + - Pod Identity Agent Addon + - CSI Snapshot Controller Addon + - S3 Mountpoint CSI Driver Addon + - EFS CSI Driver Addon + - AWS Load Balancer Controller + +As the Claim requires some input parameters from the target environment, to use it it's first required to fork the repository to your own account or copy it to a private repository. +Then edit the 'eks-cluster-with-extras.yaml' file, providing the following informations: + - The Subnet IDs to provision the EKS Cluster control-plane private endpoints and the Nodegroup hosts. + - The ProviderConfig name that should be used to create the EKS Cluster. +If using the 'authenticationMode' as CONFIG_MAP or API_AND_CONFIG_MAP, it's also possible to provide 'iam.clusterAdminRoleArn' and/or 'iam.clusterAdminUserArn'. Those role/user should already exist (or be created manually) and will be given cluster administrator rigths in the aws-auth ConfigMap. +In addition to that, it's also required to edit the 'argocd-eks-app.yaml' file, editing the following information: + - 'spec.source.repoURL' to point to your fork or private copy of the repository. + +## Pre-requisites + - [Upbound AWS Provider Crossplane Blueprint Examples](../../README.md) + + +### Deploy XRDs and Compositions +```shell +kubectl apply -k . +``` + +Verify the XRDs +```shell +kubectl get xrds +``` + +Expected output +``` +NAME ESTABLISHED OFFERED AGE +xekss.awsblueprints.io True True 5m4s +``` + +Verify the Compositions +```shell +kubectl get compositions +``` + +Expected output. Note: the output might contain more compositions but these are the ones uses by the claim in the next step +``` +NAME XR-KIND XR-APIVERSION AGE +xeks.awsblueprints.io XEks awsblueprints.io/v1alpha1 5m12s +``` + +### Validate `EnvironmentConfig` + +Crossplane `environmentconfig` named `cluster` is created by the bootstrap terraform code. Validate it exists and contains proper values +``` +kubectl get environmentconfig cluster -o yaml +``` +Expected output +``` +apiVersion: apiextensions.crossplane.io/v1alpha1 +kind: EnvironmentConfig +metadata: + name: cluster +data: + awsAccountID: + eksOIDC: +``` + +### Apply ArgoCD application +The applications contains the claim and the deployment. +``` +kubectl apply -f argocd-eks-app.yaml +``` + +### Navigate to the ArgoCD UI +Find the ArgoCD URL: +``` +kubectl -n argocd get svc argo-cd-argocd-server -o jsonpath='{.status.loadBalancer.ingress[0].hostname}' +``` +The username is `admin` and the password can be obtained by executing: +``` +kubectl -n argocd get secret argocd-initial-admin-secret -o jsonpath="{.data.password}" | base64 -d +``` + +### Sync the ArgoCD app and watch the eks-app come up. +![EKS App ArgoCD](../../diagrams/argocd-eks-app-sync.png) diff --git a/examples/upbound-aws-provider/composite-resources/eks/cluster-with-extras/argocd-eks-app.yaml b/examples/upbound-aws-provider/composite-resources/eks/cluster-with-extras/argocd-eks-app.yaml new file mode 100644 index 00000000..482c21ff --- /dev/null +++ b/examples/upbound-aws-provider/composite-resources/eks/cluster-with-extras/argocd-eks-app.yaml @@ -0,0 +1,17 @@ +apiVersion: argoproj.io/v1alpha1 +kind: Application +metadata: + name: eks-app + namespace: argocd +spec: + destination: + namespace: default + server: https://kubernetes.default.svc + project: default + source: + path: examples/upbound-aws-provider/composite-resources/eks/cluster-with-extras/ + directory: + include: "eks-cluster-with-extras.yaml" + repoURL: https://github.com/awslabs/crossplane-on-eks.git + targetRevision: HEAD + syncPolicy: {} diff --git a/examples/upbound-aws-provider/composite-resources/eks/cluster-with-extras/eks-cluster-with-extras.yaml b/examples/upbound-aws-provider/composite-resources/eks/cluster-with-extras/eks-cluster-with-extras.yaml new file mode 100644 index 00000000..1ef7352d --- /dev/null +++ b/examples/upbound-aws-provider/composite-resources/eks/cluster-with-extras/eks-cluster-with-extras.yaml @@ -0,0 +1,36 @@ +--- +apiVersion: v1 +kind: Namespace +metadata: + name: crossplane-bootstrap +--- +apiVersion: awsblueprints.io/v1alpha1 +kind: Eks +metadata: + name: crossplane-bootstrap + namespace: crossplane-bootstrap +spec: + id: crossplane-bootstrap + region: us-east-1 + authenticationMode: API_AND_CONFIG_MAP + bootstrapClusterCreatorAdminPermissions: true + enabledClusterLogTypes: + - api + - audit + - authenticator + - controllerManager + - scheduler + endpointPrivateAccess: true + endpointPublicAccess: true + iam: + clusterAdminRoleArn: "arn:aws:iam::123456789012:role/eks-admin-role" + clusterAdminUserArn: "arn:aws:iam::123456789012:user/eks-admin-user" + deletionPolicy: "Delete" + providerConfigName: crossplane-provider-config + version: "1.30" + subnets: + - subnet-aaaaaaaaaaaaaaaaa + - subnet-bbbbbbbbbbbbbbbbb + - subnet-ccccccccccccccccc + writeConnectionSecretToRef: + name: crossplane-bootstrap-kubeconfig diff --git a/examples/upbound-aws-provider/composite-resources/eks/cluster-with-extras/kustomization.yaml b/examples/upbound-aws-provider/composite-resources/eks/cluster-with-extras/kustomization.yaml new file mode 100644 index 00000000..fba0e721 --- /dev/null +++ b/examples/upbound-aws-provider/composite-resources/eks/cluster-with-extras/kustomization.yaml @@ -0,0 +1,4 @@ +apiVersion: kustomize.config.k8s.io/v1beta1 +kind: Kustomization +bases: +- ../../../../../compositions/upbound-aws-provider/eks/cluster-with-extras From f88a1957669cbf098e940f28fcbd27b3ebeb9166 Mon Sep 17 00:00:00 2001 From: Henrique Lobao Date: Tue, 2 Jul 2024 22:39:02 -0300 Subject: [PATCH 09/12] Fix relative path reference to diagrams folder --- .../composite-resources/eks/cluster-basic/README.md | 2 +- .../composite-resources/eks/cluster-with-extras/README.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/examples/upbound-aws-provider/composite-resources/eks/cluster-basic/README.md b/examples/upbound-aws-provider/composite-resources/eks/cluster-basic/README.md index 8a1c3451..e4eff890 100644 --- a/examples/upbound-aws-provider/composite-resources/eks/cluster-basic/README.md +++ b/examples/upbound-aws-provider/composite-resources/eks/cluster-basic/README.md @@ -72,4 +72,4 @@ kubectl -n argocd get secret argocd-initial-admin-secret -o jsonpath="{.data.pas ``` ### Sync the ArgoCD app and watch the eks-app come up. -![EKS App ArgoCD](../../diagrams/argocd-eks-app-sync.png) +![EKS App ArgoCD](../../../diagrams/argocd-eks-app-sync.png) diff --git a/examples/upbound-aws-provider/composite-resources/eks/cluster-with-extras/README.md b/examples/upbound-aws-provider/composite-resources/eks/cluster-with-extras/README.md index da3eac1c..e577d885 100644 --- a/examples/upbound-aws-provider/composite-resources/eks/cluster-with-extras/README.md +++ b/examples/upbound-aws-provider/composite-resources/eks/cluster-with-extras/README.md @@ -85,4 +85,4 @@ kubectl -n argocd get secret argocd-initial-admin-secret -o jsonpath="{.data.pas ``` ### Sync the ArgoCD app and watch the eks-app come up. -![EKS App ArgoCD](../../diagrams/argocd-eks-app-sync.png) +![EKS App ArgoCD](../../../diagrams/argocd-eks-app-sync.png) From 86cde7760637ccf5f50937b81c7667c4f9ff21d7 Mon Sep 17 00:00:00 2001 From: Henrique Lobao Date: Tue, 2 Jul 2024 22:53:07 -0300 Subject: [PATCH 10/12] Fix some text formatting on Readme files --- .../composite-resources/eks/cluster-basic/README.md | 8 ++++---- .../eks/cluster-with-extras/README.md | 12 ++++++------ 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/examples/upbound-aws-provider/composite-resources/eks/cluster-basic/README.md b/examples/upbound-aws-provider/composite-resources/eks/cluster-basic/README.md index e4eff890..172f04d2 100644 --- a/examples/upbound-aws-provider/composite-resources/eks/cluster-basic/README.md +++ b/examples/upbound-aws-provider/composite-resources/eks/cluster-basic/README.md @@ -2,10 +2,10 @@ This example provides a Claim that deploys an EKS Cluster with no Addons and a single Nodegroup. First, it applies the Crossplane XRDs and Composition. Then it applies an ArgoCD app that contains the Crossplane Claim. The Crossplane creates the EKS Cluster and Nodegroup resources. As the Claim requires some input parameters from the target environment, to use it it's first required to fork the repository to your own account or copy it to a private repository. Then edit the eks-cluster-basic.yaml file, providing the following informations: - - The Subnet IDs to provision the EKS Cluster control-plane private endpoints and the Nodegroup hosts. - - The ProviderConfig name that should be used to create the EKS Cluster. -In addition to that, it's also required to edit the 'argocd-eks-app.yaml' file, editing the following information: - - 'spec.source.repoURL' to point to your fork or private copy of the repository. + - The Subnet IDs on `spec.subnets` to provision the EKS Cluster control-plane private endpoints and the Nodegroup hosts. + - The ProviderConfig name on `spec.providerConfigName` that should be used to create the EKS Cluster. +In addition to that, it's also required to edit the `argocd-eks-app.yaml` file, editing the following information: + - `spec.source.repoURL` to point to your fork or private copy of the repository. ## Pre-requisites - [Upbound AWS Provider Crossplane Blueprint Examples](../../README.md) diff --git a/examples/upbound-aws-provider/composite-resources/eks/cluster-with-extras/README.md b/examples/upbound-aws-provider/composite-resources/eks/cluster-with-extras/README.md index e577d885..e3d520a1 100644 --- a/examples/upbound-aws-provider/composite-resources/eks/cluster-with-extras/README.md +++ b/examples/upbound-aws-provider/composite-resources/eks/cluster-with-extras/README.md @@ -13,12 +13,12 @@ In addition to the EKS Cluster control-plane and the Nodegroup, the following re - AWS Load Balancer Controller As the Claim requires some input parameters from the target environment, to use it it's first required to fork the repository to your own account or copy it to a private repository. -Then edit the 'eks-cluster-with-extras.yaml' file, providing the following informations: - - The Subnet IDs to provision the EKS Cluster control-plane private endpoints and the Nodegroup hosts. - - The ProviderConfig name that should be used to create the EKS Cluster. -If using the 'authenticationMode' as CONFIG_MAP or API_AND_CONFIG_MAP, it's also possible to provide 'iam.clusterAdminRoleArn' and/or 'iam.clusterAdminUserArn'. Those role/user should already exist (or be created manually) and will be given cluster administrator rigths in the aws-auth ConfigMap. -In addition to that, it's also required to edit the 'argocd-eks-app.yaml' file, editing the following information: - - 'spec.source.repoURL' to point to your fork or private copy of the repository. +Then edit the `eks-cluster-with-extras.yaml` file, providing the following informations: + - The Subnet IDs on `spec.subnets` to provision the EKS Cluster control-plane private endpoints and the Nodegroup hosts. + - The ProviderConfig name on `spec.providerConfigName` that should be used to create the EKS Cluster. +If using the `authenticationMode` as 'CONFIG_MAP' or 'API_AND_CONFIG_MAP', it's also possible to provide `iam.clusterAdminRoleArn` and/or `iam.clusterAdminUserArn`. Those role/user should already exist (or be created manually) and will be given cluster administrator rigths in the `aws-auth` ConfigMap. +In addition to that, it's also required to edit the `argocd-eks-app.yaml` file, editing the following information: + - `spec.source.repoURL` to point to your fork or private copy of the repository. ## Pre-requisites - [Upbound AWS Provider Crossplane Blueprint Examples](../../README.md) From 38fe323d53f4921e8a964e98db095029ea24c167 Mon Sep 17 00:00:00 2001 From: Henrique Lobao Date: Tue, 2 Jul 2024 23:01:30 -0300 Subject: [PATCH 11/12] Fix typo in Readme --- .../composite-resources/eks/cluster-with-extras/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/upbound-aws-provider/composite-resources/eks/cluster-with-extras/README.md b/examples/upbound-aws-provider/composite-resources/eks/cluster-with-extras/README.md index e3d520a1..d4bfe2db 100644 --- a/examples/upbound-aws-provider/composite-resources/eks/cluster-with-extras/README.md +++ b/examples/upbound-aws-provider/composite-resources/eks/cluster-with-extras/README.md @@ -1,4 +1,4 @@ -# Example to deploy a basic EKS cluster with one nodegroup and extra features +# Example to deploy an EKS cluster with one nodegroup and extra features This example provides a Claim that deploys an EKS Cluster with some Addons and a single Nodegroup. First, it applies the Crossplane XRDs and Composition. Then it applies an ArgoCD app that contains the Crossplane Claim. The Crossplane creates the EKS Cluster, the Addons and Nodegroup resources. In addition to the EKS Cluster control-plane and the Nodegroup, the following resources, Addons and features are also deployed: - A KMS Key to be used on the cluster encryption for secrets. From 5621c30afe74bd4cd0e5ec5221635292da366b3d Mon Sep 17 00:00:00 2001 From: Henrique Lobao Date: Tue, 2 Jul 2024 23:11:14 -0300 Subject: [PATCH 12/12] Fix text formatting on Readme files --- .../composite-resources/eks/cluster-basic/README.md | 4 +++- .../composite-resources/eks/cluster-with-extras/README.md | 3 +++ 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/examples/upbound-aws-provider/composite-resources/eks/cluster-basic/README.md b/examples/upbound-aws-provider/composite-resources/eks/cluster-basic/README.md index 172f04d2..ce584c34 100644 --- a/examples/upbound-aws-provider/composite-resources/eks/cluster-basic/README.md +++ b/examples/upbound-aws-provider/composite-resources/eks/cluster-basic/README.md @@ -1,9 +1,11 @@ # Example to deploy a basic EKS cluster with one nodegroup This example provides a Claim that deploys an EKS Cluster with no Addons and a single Nodegroup. First, it applies the Crossplane XRDs and Composition. Then it applies an ArgoCD app that contains the Crossplane Claim. The Crossplane creates the EKS Cluster and Nodegroup resources. + As the Claim requires some input parameters from the target environment, to use it it's first required to fork the repository to your own account or copy it to a private repository. -Then edit the eks-cluster-basic.yaml file, providing the following informations: +Then edit the `eks-cluster-basic.yaml` file, providing the following informations: - The Subnet IDs on `spec.subnets` to provision the EKS Cluster control-plane private endpoints and the Nodegroup hosts. - The ProviderConfig name on `spec.providerConfigName` that should be used to create the EKS Cluster. + In addition to that, it's also required to edit the `argocd-eks-app.yaml` file, editing the following information: - `spec.source.repoURL` to point to your fork or private copy of the repository. diff --git a/examples/upbound-aws-provider/composite-resources/eks/cluster-with-extras/README.md b/examples/upbound-aws-provider/composite-resources/eks/cluster-with-extras/README.md index d4bfe2db..b18a3909 100644 --- a/examples/upbound-aws-provider/composite-resources/eks/cluster-with-extras/README.md +++ b/examples/upbound-aws-provider/composite-resources/eks/cluster-with-extras/README.md @@ -1,5 +1,6 @@ # Example to deploy an EKS cluster with one nodegroup and extra features This example provides a Claim that deploys an EKS Cluster with some Addons and a single Nodegroup. First, it applies the Crossplane XRDs and Composition. Then it applies an ArgoCD app that contains the Crossplane Claim. The Crossplane creates the EKS Cluster, the Addons and Nodegroup resources. + In addition to the EKS Cluster control-plane and the Nodegroup, the following resources, Addons and features are also deployed: - A KMS Key to be used on the cluster encryption for secrets. - VPC CNI Addon @@ -16,7 +17,9 @@ As the Claim requires some input parameters from the target environment, to use Then edit the `eks-cluster-with-extras.yaml` file, providing the following informations: - The Subnet IDs on `spec.subnets` to provision the EKS Cluster control-plane private endpoints and the Nodegroup hosts. - The ProviderConfig name on `spec.providerConfigName` that should be used to create the EKS Cluster. + If using the `authenticationMode` as 'CONFIG_MAP' or 'API_AND_CONFIG_MAP', it's also possible to provide `iam.clusterAdminRoleArn` and/or `iam.clusterAdminUserArn`. Those role/user should already exist (or be created manually) and will be given cluster administrator rigths in the `aws-auth` ConfigMap. + In addition to that, it's also required to edit the `argocd-eks-app.yaml` file, editing the following information: - `spec.source.repoURL` to point to your fork or private copy of the repository.