AWSCluster

Cet article décrit les options de configuration de la définition de ressource personnalisée AWSCluster.

Définir un AWSCluster

AWSCluster est une ressource personnalisée Kubernetes définie par GKE sur AWS. Cette ressource représente un plan de contrôle GKE sur AWS.

Pour créer un cluster à partir de ce modèle, copiez le code YAML suivant et renseignez les valeurs en surbrillance définies dans les spécifications de champs spec.networking et spec.controlPlane. Appliquez ensuite le fichier manifeste de la ressource à votre service de gestion.

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

Les sous-champs sous spec sont décrits dans les sections suivantes.

spec.networking

Cet objet définit la configuration de mise en réseau à l'échelle du cluster.

Nom Description Type Exemple Obligatoire
vpcID ID du VPC dans lequel votre cluster s'exécute. Le plan de contrôle et les pools de nœuds d'un cluster d'utilisateur s'exécutent dans un seul VPC. string vpc-0814934042d983118 Oui
podAddressCIDRBlocks Plage d'adresses IPv4 utilisées par les pods du cluster. Actuellement, une seule plage est acceptée. La plage ne doit chevaucher aucun sous-réseau accessible depuis votre réseau. Vous pouvez utiliser la même plage en toute sécurité sur plusieurs objets AWSCluster différents. list(string) [10.1.0.0/16] Oui
serviceAddressCIDRBlocks Plage d'adresses IPv4 utilisées par les services du cluster. Actuellement, une seule plage est acceptée. La plage ne doit chevaucher aucun sous-réseau accessible depuis votre réseau. Vous pouvez utiliser la même plage en toute sécurité sur plusieurs objets AWSCluster différents. list(string) [10.2.0.0/16] Oui
serviceLoadBalancerSubnetIDs ID de sous-réseau où GKE sur AWS peut créer des équilibreurs de charge publics ou privés. GKE sur AWS applique des tags à chacun de ces sous-réseaux pour assurer l'équilibrage de charge. La compatibilité avec l'ALB nécessite plusieurs sous-réseaux spécifiés. list(string) [subnet-abcdefg, subnet-12345678]

spec.controlPlane

Cet objet inclut des paramètres courants pour le plan de contrôle du cluster.

Nom Description Type Exemple Obligatoire
version Version GKE du plan de contrôle. Pour plus d'informations, consultez les pages Gestion des versions et mises à jour et Mettre à niveau un cluster d'utilisateur. string 1.25.5-gke.2100 Oui
instanceType Un type d'instance EC2 AWS pour chaque instance dupliquée du plan de contrôle. Consultez la section Types d'instances compatibles. string m5.large Oui
keyName Paire de clés EC2 AWS attribuée à chaque instance dupliquée du plan de contrôle. string my-key-pair Oui
subnetIDs Liste de sous-réseaux VPC pour les instances dupliquées du plan de contrôle. list(string) [subnet-06a004869a1eae947] Oui
securityGroupIDs GKE sur AWS crée automatiquement des groupes de sécurité avec des règles minimales requises pour un cluster opérationnel. Si vous souhaitez ajouter des groupes de sécurité supplémentaires avec accès aux instances dupliquées du plan de contrôle, ajoutez leurs ID à securityGroupIDs. list(string) [sg-0ec06559d997a796f] no
iamInstanceProfile Nom du profil d'instance EC2 d'AWS attribué aux instances dupliquées du plan de contrôle. string my-control-plane-profile Oui
databaseEncryption.kmsKeyARN Nom de ressource Amazon (ARN) de la clé KMS AWS utilisée par GKE sur AWS pour chiffrer les secrets de la couche d'application dans les clusters. chaîne arn:aws:kms:us-west-1:123456789:key/aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee
hub.membershipName Nom d'appartenance Connect utilisé pour enregistrer votre cluster. chaîne projects/YOUR_PROJECT/locations/global/memberships/CLUSTER_NAME
cloudOperations Configuration de Cloud Logging et Cloud Monitoring pour les nœuds du plan de contrôle. object {projectID: YOUR_PROJECT, location: us-central1, enableLogging: true, enableMonitoring: true} no
tags Métadonnées clé/valeur attribuées à chaque ressource AWS prenant en charge AWSCluster. Pour en savoir plus, consultez l'article Bonnes pratiques en matière de balisage. map(string) {Environment: Production, Team: Analytics} no
proxySecretName Nom d'un secret choisi par l'utilisateur pour définir les proxys réseau spécifiques au cluster chaîne proxy-secret-0 no
workloadIdentity Bucket Cloud Storage pour la configuration de Workload Identity. Contient un seul champ : oidcDiscoveryGCSBucket. object {oidcDiscoveryGCSBucket: my-bucket} no
rootVolume Paramètres des volumes racine de l'instance dupliquée du plan de contrôle. Contient un objet défini dans la section suivante. object {sizeGiB: 10} Oui
etcd Paramètres des volumes etcd. Contient un objet défini dans la section suivante. object {sizeGiB: 10} Oui

spec.controlPlane.rootVolume et spec.etcd.rootVolume

Ces champs s'appliquent à la fois à spec.controlPlane.rootVolume et à spec.etcd.mainVolume.

Nom Description Type Exemple Requis
sizeGiB Taille du volume racine en gigaoctets. integer 10 Oui
volumeType Type de volume EBS AWS du nœud de plan de contrôle. Peut être gp2 (par défaut), ou gp3. string gp2 no
iops Nombre d'opérations d'E/S par seconde (IOPS) provisionné pour les volumes. Valable uniquement lorsque la valeur de volumeType est GP3. Pour plus d'informations, consultez la section Volumes SSD à usage général (gp3). integer 5000 no
kmsKeyARN ARN de la clé KMS AWS utilisée pour chiffrer le volume EBS. Pour plus d'informations, consultez la page Utiliser des clés gérées par le client (CMK) pour chiffrer des volumes. string arn:aws:kms:us-west-1:123456789:key/aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee no

spec.authentication.awsIAM

Cet objet spécifie les rôles auxquels un administrateur de cluster a accès avec IAM AWS.

Nom Description Type Exemple Obligatoire
adminIdentityARNs ARN des utilisateurs ou des rôles IAM AWS qui disposent d'un accès administrateur de cluster. chaîne arn:aws:iam::123456789012:user/admin Obligatoire uniquement si vous utilisez l'authentification IAM AWS.

spec.authentication.oidc

Vous pouvez spécifier plusieurs objets oidc. L'objet oidc est défini ci-dessous. Pour plus d'informations, consultez la section S'authentifier avec OIDC.

Champ Obligatoire Description Format
certificateAuthorityData Non Certificat encodé au format PEM encodé en base64 pour le fournisseur OIDC. Pour créer la chaîne, encodez le certificat, y compris les en-têtes, en base64. Incluez la chaîne obtenue dans certificateAuthorityData en tant que ligne unique. Exemple : certificateAuthorityData: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tC...k1JSUN2RENDQWFT== Chaîne
clientID Oui ID de l'application cliente qui envoie des requêtes d'authentification au fournisseur OpenID. Chaîne
clientSecret Non Clé secrète partagée entre l'application cliente OIDC et le fournisseur OIDC. Chaîne
extraParams Non Paramètres de clé-valeur supplémentaires à envoyer au fournisseur OpenID. Si vous autorisez un groupe, transmettez resource=token-groups-claim.

Si votre serveur d'autorisation vous demande l'autorisation, pour l'authentification avec Microsoft Azure et Okta, définissez extraParams sur prompt=consent. Pour Google Cloud Identity, définissez extraParams sur prompt=consent,access_type=offline.

Liste d'éléments séparés par une virgule
groupsClaim Non Revendication JWT que le fournisseur utilise pour renvoyer vos groupes de sécurité. Chaîne
groupPrefix Non Préfixe ajouté aux revendications de groupe pour éviter les conflits avec les noms existants. Par exemple, pour un groupe foobar et un préfixe gid- donnés, gid-foobar. Chaîne
issuerURI Oui URL où les requêtes d'autorisation sont envoyées à votre OpenID, telle que https://example.com/adfs. Le serveur de l'API Kubernetes utilise cette URL pour découvrir les clés publiques permettant de valider les jetons. L'URI doit utiliser le protocole HTTPS. Chaîne d'URL
kubectlRedirectURI Oui L'URL de redirection que "kubectl" utilise pour l'autorisation. Chaîne d'URL
scopes Oui Niveaux d'accès supplémentaires à envoyer au fournisseur OpenID. Microsoft Azure et Okta nécessitent le niveau d'accès offline_access. Liste d'éléments séparés par une virgule
userClaim Non Revendication JWT à utiliser comme nom d'utilisateur. La valeur par défaut est "sub", qui est censée correspondre à un identifiant unique de l'utilisateur final. Vous pouvez choisir d'autres revendications, telles que l'e-mail ou le nom, en fonction du fournisseur OpenID. Toutefois, les revendications autres que l'e-mail sont précédées de l'URL de l'émetteur pour éviter les conflits de noms. Chaîne
userPrefix Non Préfixe ajouté aux revendications de nom d'utilisateur pour éviter les conflits avec les noms existants. Si vous ne fournissez pas ce champ et que le nom d'utilisateur est une valeur autre qu'une adresse e-mail, le préfixe est issuerurl# par défaut. Lorsque vous définissez userPrefix sur -, le préfixe est désactivé. Chaîne