AWSCluster

In diesem Thema werden die Konfigurationsoptionen der benutzerdefinierten Ressourcendefinition von AWSCluster beschrieben.

AWSCluster definieren

AWSCluster ist eine benutzerdefinierte Kubernetes-Ressource, die von GKE on AWS definiert wird. Diese Ressource stellt eine Steuerungsebene von GKE on AWS dar.

Um einen Cluster aus dieser Vorlage zu erstellen, kopieren Sie die folgende YAML und ergänzen Sie die markierten Werte in den Felddefinitionen spec.networking und spec.controlPlane. Wenden Sie anschließend das Ressourcenmanifest auf Ihren Verwaltungsdienst an.

apiVersion: multicloud.cluster.gke.io/v1
kind: AWSCluster
metadata:
  name: CLUSTER_NAME
spec:
  region: AWS_REGION
  networking:
    vpcID: VPC_ID
    podAddressCIDRBlocks: POD_ADDRESS_CIDR_BLOCKS
    serviceAddressCIDRBlocks: SERVICE_ADDRESS_CIDR_BLOCKS
    serviceLoadBalancerSubnetIDs: SERVICE_LOAD_BALANCER_SUBNETS
  controlPlane:
    version: GKE_VERSION # Latest version is 1.25.5-gke.2100
    instanceType: AWS_INSTANCE_TYPE
    keyName: SSH_KEY_NAME
    subnetIDs:
    - CONTROL_PLANE_SUBNET_IDS
    securityGroupIDs:
    - CONTROL_PLANE_SECURITY_GROUPS
    iamInstanceProfile: CONTROL_PLANE_IAM_ROLE
    databaseEncryption:
      kmsKeyARN: ARN_OF_KMS_KEY
    hub:
      membershipName: ANTHOS_CONNECT_NAME
    cloudOperations: # Optional
      projectID: YOUR_PROJECT
      location: GCP_LOCATION
      enableLogging: ENABLE_LOGGING
      enableMonitoring: ENABLE_MONITORING
    tags:
      TAG_KEY: TAG_VALUE
    proxySecretName: PROXY_SECRET_NAME
    workloadIdentity:
      oidcDiscoveryGCSBucket: WORKLOAD_IDENTITY_BUCKET
    rootVolume:  # Optional
      sizeGiB: ROOT_VOLUME_SIZE
      volumeType: ROOT_VOLUME_TYPE
      iops: ROOT_VOLUME_IOPS
      kmsKeyARN: ROOT_VOLUME_KEY
    etcd:  # Optional
      mainVolume:
        sizeGiB: ETCD_VOLUME_SIZE
        volumeType: ETCD_VOLUME_TYPE
        iops: ETCD_VOLUME_IOPS
        kmsKeyARN: ETCD_VOLUME_KEY
  authentication:
    awsIAM:
      adminIdentityARNs: ADMIN_IAM_ARN
    oidc: # Optional
    - certificateAuthorityData: CERTIFICATE_STRING
      clientID: CLIENT_ID
      clientSecret: CLIENT_SECRET
      extraParams:  EXTRA_PARAMS
      groupsClaim:  GROUPS_CLAIM
      groupPrefix:  GROUP_PREFIX
      issuerURI:  ISSUER_URL
      kubectlRedirectURI:  KUBECTL_REDIRECT_URL
      scopes:  SCOPES
      userClaim:  USER_CLAIM
      userPrefix:  USER_PREFIX

Die untergeordneten Felder von spec sind in den folgenden Abschnitten beschrieben.

spec.networking

Dieses Objekt definiert eine clusterweite Netzwerkkonfiguration.

Name Beschreibung Typ Beispiel Erforderlich
vpcID Die ID der VPC, in der Ihr Cluster ausgeführt wird. Die Steuerungsebene und die Knotenpools eines Nutzerclusters werden in einer einzelnen VPC ausgeführt. string vpc-0814934042d983118 Ja
podAddressCIDRBlocks Bereich der IPv4-Adressen, der von den Pods des Clusters verwendet wird. Derzeit wird nur ein Bereich unterstützt. Der Bereich darf sich nicht mit Subnetzen überschneiden, die von Ihrem Netzwerk erreichbar sind. Sie können denselben Bereich für mehrere unterschiedliche AWSCluster-Objekte verwenden. list(string) [10.1.0.0/16] Ja
serviceAddressCIDRBlocks Bereich der IPv4-Adressen, der von den Diensten des Clusters verwendet wird. Derzeit wird nur ein Bereich unterstützt. Der Bereich darf sich nicht mit Subnetzen überschneiden, die von Ihrem Netzwerk erreichbar sind. Sie können denselben Bereich für mehrere unterschiedliche AWSCluster-Objekte verwenden. list(string) [10.2.0.0/16] Ja
serviceLoadBalancerSubnetIDs Subnetz-IDs, in denen GKE on AWS öffentliche oder private Load-Balancer erstellen kann. GKE on AWS wendet Tags auf jedes dieser Subnetze an, um das Load-Balancing zu unterstützen. Die ALB-Unterstützung erfordert mehr als ein angegebenes Subnetz. list(string) [subnet-abcdefg, subnet-12345678]

spec.controlPlane

Dieses Objekt enthält allgemeine Parameter für die Steuerungsebene des Clusters.

Name Beschreibung Typ Beispiel Erforderlich
version Die GKE-Version der Steuerungsebene. Weitere Informationen finden Sie unter Versionsverwaltung und Upgrades und Nutzercluster aktualisieren. string 1.25.5-gke.2100 Ja
instanceType Ein AWS-EC2-Instanztyp für jedes Replikat der Steuerungsebene. Siehe Unterstützte Instanztypen. string m5.large Ja
keyName Das AWS-EC2-Schlüsselpaar, das jedem Replikat der Steuerungsebene zugewiesen ist. string my-key-pair Ja
subnetIDs Eine Liste der VPC-Subnetze für Replikate der Steuerungsebene. list(string) [subnet-06a004869a1eae947] Ja
securityGroupIDs GKE on AWS erstellt automatisch Sicherheitsgruppen mit den erforderlichen Regeln für einen funktionierenden Cluster. Wenn Sie weitere Sicherheitsgruppen hinzufügen möchten, die Zugriff auf Replikate der Steuerungsebene haben, fügen Sie deren IDs zu securityGroupIDs hinzu. list(string) [sg-0ec06559d997a796f] Nein
iamInstanceProfile Name des AWS EC2-Instanzprofils, das den Replikaten der Steuerungsebene zugewiesen ist. string my-control-plane-profile Ja
databaseEncryption.kmsKeyARN Der Amazon-Ressourcenname (ARN) des AWS KMS-Schlüssels, den GKE on AWS zum Verschlüsseln von Secrets auf Anwendungsebene in Clustern verwendet. String arn:aws:kms:us-west-1:123456789:key/aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee
hub.membershipName Der Name der Connect-Mitgliedschaft, der für die Registrierung Ihres Clusters verwendet wird. String projects/YOUR_PROJECT/locations/global/memberships/CLUSTER_NAME
cloudOperations Die Konfiguration von Cloud Logging und Cloud Monitoring für Knoten der Steuerungsebene. object {projectID: YOUR_PROJECT, location: us-central1, enableLogging: true, enableMonitoring: true} no
Tags Schlüssel/Wert-Metadaten, die jeder AWS-Ressource zugewiesen sind, die den AWSCluster unterstützt. Weitere Informationen finden Sie unter Best Practices für die Tag-Kennzeichnung. map(string) {Environment: Production, Team: Analytics} no
proxySecretName Vom Nutzer ausgewählter Name eines Secrets, mit dem clusterspezifische Netzwerk-Proxys definiert werden String proxy-secret-0 no
workloadIdentity Cloud Storage-Bucket für die Konfiguration von Workload Identity. Enthält ein einzelnes Feld: oidcDiscoveryGCSBucket. object {oidcDiscoveryGCSBucket: my-bucket} no
rootVolume Parameter für Replikat-Root-Volumes der Steuerungsebene. Enthält ein im folgenden Abschnitt definiertes Objekt. object {sizeGiB: 10} Ja
etcd Parameter für etcd-Volumes. Enthält ein im folgenden Abschnitt definiertes Objekt. object {sizeGiB: 10} Ja

spec.controlPlane.rootVolume und spec.etcd.rootVolume

Diese Felder gelten sowohl für spec.controlPlane.rootVolume als auch für spec.etcd.mainVolume.

Name Beschreibung Typ Beispiel Erforderlich
sizeGiB Größe des Root-Volumes in Gigabyte. integer 10 Ja
volumeType AWS-EBS-Volume-Typ des Steuerungsebenenknotens. Kann gp2 (Standard) oder gp3 sein. string gp2 no
IOPS Die Menge der bereitgestellten E/A-Vorgänge pro Sekunde (IOPS) für Volumes. Nur gültig, wenn volumeType GP3 ist. Weitere Informationen finden Sie unter Allgemeine SSD-Volumes (gp3). integer 5000 no
kmsKeyARN Der ARN des AWS KMS-Schlüssels, der zum Verschlüsseln des EBS-Volumes verwendet wird. Weitere Informationen finden Sie unter Vom Kunden verwaltete CMK zum Verschlüsseln von Volumes verwenden. string arn:aws:kms:us-west-1:123456789:key/aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee no

spec.authentication.awsIAM

Mit diesem Objekt werden Rollen angegeben, denen mit AWS-IAM Zugriff als Clusteradministrator gewährt wird.

Name Beschreibung Typ Beispiel Erforderlich
adminIdentityARNs ARN von AWS-IAM-Nutzern oder -Rollen, denen Zugriff als Clusteradministrator gewährt wurde String arn:aws:iam::123456789012:user/admin Nur erforderlich bei Verwendung der AWS-IAM-Authentifizierung.

spec.authentication.oidc

Sie können mehrere oidc-Objekte angeben. Das oidc-Objekt ist unten definiert. Weitere Informationen finden Sie unter Mit OIDC authentifizieren.

Feld Erforderlich Beschreibung Format
certificateAuthorityData Nein Ein base64-codiertes PEM-codiertes Zertifikat für den OIDC-Anbieter. Codieren Sie das Zertifikat, einschließlich der Header, in base64, um den String zu erstellen. Fügen Sie den resultierenden String in certificateAuthorityData als eine Zeile ein. Beispiel: certificateAuthorityData: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tC...k1JSUN2RENDQWFT== String
clientID Ja Die ID für die Clientanwendung, die Authentifizierungsanfragen an den OpenID-Anbieter sendet. String
clientSecret Nein Gemeinsames Secret von OIDC-Clientanwendung und OIDC-Anbieter. String
extraParams Nein Zusätzliche Schlüssel/Wert-Parameter, die an den OpenID-Anbieter gesendet werden. Wenn Sie eine Gruppe autorisieren, übergeben Sie resource=token-groups-claim.

Wenn Ihr Autorisierungsserver zur Einwilligung auffordert, legen Sie für die Authentifizierung mit Microsoft Azure und Okta extraParams auf prompt=consent fest. Legen Sie für Google Cloud Identity extraParams auf prompt=consent,access_type=offline fest.

Durch Kommas getrennte Liste
groupsClaim Nein Die JWT-Anforderung, mit der der Anbieter Ihre Sicherheitsgruppen zurückgibt. String
groupPrefix Nein Das Präfix, das Gruppenanforderungen vorangestellt wird, um Konflikte mit vorhandenen Namen zu vermeiden. Beispiel: Aus der Gruppe "foobar" und dem Präfix "gid-" resultiert "gid-foobar". String
issuerURI Ja Die URL, über die Autorisierungsanfragen an Ihren OpenID-Anbieter gesendet werden, z. B. https://example.com/adfs. Der Kubernetes API-Server verwendet diese URL, um öffentliche Schlüssel zum Verifizieren von Tokens festzustellen. Für den URI muss HTTPS verwendet werden. URL String
kubectlRedirectURI Ja Die für die Autorisierung verwendete Weiterleitungs-URL "kubectl". URL String
Umfang Ja Zusätzliche Bereiche, die an den OpenID-Anbieter gesendet werden. Microsoft Azure und Okta benötigen den Bereich offline_access. Durch Kommas getrennte Liste
userClaim Nein Die JWT-Anforderung, die als Nutzername verwendet wird. Der Standardwert ist "sub". Dies ist eine eindeutige ID des Endnutzers. Je nach OpenID-Anbieter können Sie andere Anforderungen auswählen, beispielsweise E-Mail-Adresse oder Name. Allerdings wird anderen Anforderungen als der E-Mail-Adresse die Aussteller-URL vorangestellt, um Namenskonflikte zu vermeiden. String
userPrefix Nein Das Präfix, das Nutzernamensanforderungen vorangestellt wird, um Konflikte mit vorhandenen Namen zu vermeiden. Wenn Sie dieses Feld nicht angeben und der Nutzername ein anderer Wert als eine E-Mail-Adresse ist, wird das Präfix standardmäßig auf issuerurl# gesetzt. Wenn Sie userPrefix auf - setzen, ist das Präfix deaktiviert. String