acs-profile est une ConfigMap au niveau du cluster qui injecte automatiquement les paramètres réseau et DNS dans les pods ACS lors de leur création. Plutôt que d'ajouter les ID de vSwitch, les ID de groupe de sécurité ou la configuration DNS à chaque fichier YAML de charge de travail, définissez ces valeurs par défaut une seule fois dans acs-profile pour qu'ACS les applique de manière transparente.
Fonctionnement
Lorsqu'ACS crée un pod, il lit la ConfigMap acs-profile dans le namespace kube-system et fusionne les valeurs par défaut configurées dans la spécification du pod. La mise à jour de la ConfigMap ne nécessite aucun redémarrage du composant acs-virtual-node.
Comportement de la mise à jour :
Nouveaux pods : Les paramètres mis à jour prennent effet immédiatement.
Pods existants : Les nouveaux paramètres s'appliquent uniquement après une mise à jour progressive (rolling update).
acs-profile prend en charge deux types de configuration :
Paramètres du cluster : Paramètres réseau par défaut appliqués à tous les pods ACS (ID de vSwitch, groupe de sécurité, VPC et mode de résolution DNS).
Sélecteurs : Règles basées sur des libellés permettant d'injecter des annotations et des libellés supplémentaires dans les pods correspondant à des critères spécifiques.
Prérequis
Avant de commencer, assurez-vous de disposer des éléments suivants :
Un cluster ACS avec le composant acs-virtual-node déployé
kubectlconfiguré avec un accès au clusterLes autorisations nécessaires pour lire et modifier les ConfigMaps dans le namespace
kube-system
Consulter la configuration actuelle
Exécutez la commande suivante pour afficher l'acs-profile actuel :
kubectl get cm -n kube-system acs-profile -o yaml
Un acs-profile par défaut se présente comme suit :
apiVersion: v1
kind: ConfigMap
metadata:
name: acs-profile
namespace: kube-system
data:
enablePrivateZone: "false"
securityGroupId: sg-2zeeyaaxlkq9sppl****
vSwitchIds: vsw-2ze23nqzig8inprou****,vsw-2ze94pjtfuj9vaymf****
vpcId: vpc-2zeghwzptn5zii0w7****
selectors: ""
Mettre à jour les paramètres du cluster
Les paramètres du cluster dans acs-profile définissent l'environnement réseau par défaut pour tous les pods ACS. Les pods qui ne définissent pas explicitement ces valeurs les héritent du profil.
Modifiez la ConfigMap à l'aide de kubectl :
kubectl edit configmap acs-profile -n kube-system
Vous pouvez également utiliser la console ACS :
Connectez-vous à la console ACS.
Sur la page Clusters, cliquez sur le nom de votre cluster.
Dans le volet de navigation de gauche, choisissez Configurations > ConfigMaps.
Sélectionnez kube-system dans la liste déroulante des namespaces.
Recherchez acs-profile et cliquez sur Edit YAML.
Le tableau suivant décrit les paramètres modifiables :
| Paramètre | Exemple | Description |
|---|---|---|
securityGroupId |
sg-2ze0b9o8pjjzts4h**** |
Groupe de sécurité auquel appartiennent les pods ACS. Ce paramètre contrôle les règles de trafic entrant et sortant pour tous les pods utilisant ce profil. |
vSwitchIds |
vsw-2zeet2ksvw7f14ryz**** |
ID des vSwitch à associer aux pods ACS. Séparez plusieurs ID par des virgules. Ce paramètre détermine les sous-réseaux dans lesquels les pods sont lancés. |
vpcId |
vpc-2zeghwzptn5zii0w7**** |
Virtual Private Cloud (VPC) où les pods ACS sont déployés. Cette valeur doit correspondre au VPC des vSwitch spécifiés. |
enablePrivateZone |
"false" |
Active ou désactive l'utilisation de PrivateZone pour la résolution des noms de domaine. Définissez cette valeur sur "true" si vos pods doivent résoudre des enregistrements DNS privés. |
Il s'agit de valeurs par défaut au niveau du cluster. Une spécification de pod qui définit explicitement l'une de ces valeurs est prioritaire sur les valeurs par défaut de l'acs-profile.
Résoudre les erreurs de configuration
Si une erreur de formatage subsiste dans l'acs-profile après une modification, la configuration ne prend pas effet. ACS enregistre l'erreur sous forme d'événement Kubernetes. Exécutez la commande suivante pour consulter les détails de l'erreur :
kubectl -n kube-system get event --field-selector involvedObject.namespace=kube-system,involvedObject.name=acs-profile
Configurer les sélecteurs
Les sélecteurs permettent d'injecter des annotations et des libellés supplémentaires dans des pods spécifiques en fonction de leur namespace ou de leurs libellés, sans modifier les fichiers YAML de ces pods.
Lors de la création d'un pod, ACS évalue chaque sélecteur dans l'ordre. Pour chaque sélecteur dont les critères correspondent au pod, ACS fusionne les paramètres effect (annotations et libellés) dans le pod. Les annotations et libellés déjà présents sur le pod ne sont jamais écrasés.
Paramètres des sélecteurs
| Paramètre | Obligatoire | Description |
|---|---|---|
name |
Oui | Nom unique du sélecteur. |
namespaceSelector |
Non | Filtre les pods selon les libellés de leur namespace. |
namespaceSelector.matchLabels |
Non | Règle de correspondance au format {key: value}. |
namespaceSelector.matchExpressions |
Non | Liste des exigences du sélecteur. Opérateurs valides : In, NotIn, Exists, DoesNotExist. Pour In et NotIn, les valeurs ne doivent pas être vides. |
objectSelector |
Non | Filtre les pods selon les libellés du pod lui-même. |
objectSelector.matchLabels |
Non | Règle de correspondance au format {key: value}. |
objectSelector.matchExpressions |
Non | Liste des exigences du sélecteur. Mêmes opérateurs que pour namespaceSelector.matchExpressions. |
effect |
Non | Annotations et libellés à injecter dans les pods correspondants. |
namespaceSelector et objectSelector utilisent une logique ET : lorsque les deux sont configurés, un pod doit satisfaire aux deux conditions pour correspondre. Configurez au moins l'un d'eux pour chaque sélecteur. Si aucun des deux n'est configuré mais que effect est défini, l'effet s'applique à tous les pods ACS du cluster.
Priorité des sélecteurs
Si plusieurs sélecteurs correspondent au même pod, ACS les applique dans l'ordre où ils apparaissent dans le tableau selectors. Les annotations et libellés injectés respectent la priorité suivante :
Annotations et libellés existants sur le pod (priorité la plus élevée, jamais écrasés)
Paramètres
effectdu premier sélecteur correspondantParamètres
effectdes sélecteurs correspondants suivants
Exemple
L'acs-profile suivant utilise un sélecteur nommé selector-demo1 pour injecter une configuration DNS personnalisée dans les pods répondant à des critères de libellés spécifiques :
apiVersion: v1
kind: ConfigMap
metadata:
name: acs-profile
namespace: kube-system
data:
selectors: |
[
{
"name": "selector-demo1",
"namespaceSelector": {
"matchLabels": {
"kubernetes.io/metadata.name": "dev-ns"
}
},
"objectSelector": {
"matchLabels": {
"acs": "true"
},
"matchExpressions": [
{
"key": "usage",
"operator": "In",
"values": ["testing"]
}
]
},
"effect": {
"annotations": {
"network.alibabacloud.com/custom-dnsconfig": "{\"servers\":[\"114.114.114.114\",\"8.8.8.8\"],\"searches\":[\"xx.com\",\"yy.com\"],\"options\":[\"ndots:2\",\"edns0\"]}"
},
"labels": {
"created-by-acs": "true"
}
}
}
]
Fonctionnement de ce sélecteur : Tout pod situé dans le namespace dev-ns qui possède à la fois le libellé acs=true et le libellé usage=testing reçoit :
L'annotation
network.alibabacloud.com/custom-dnsconfigavec les serveurs DNS114.114.114.114et8.8.8.8, les domaines de recherchexx.cometyy.com, ainsi que les optionsndots:2etedns0Le libellé
created-by-acs=true
Pour vérifier le bon fonctionnement du sélecteur, créez un pod correspondant aux critères :
apiVersion: v1
kind: Pod
metadata:
name: nginx
namespace: dev-ns
labels:
acs: "true"
usage: "testing"
spec:
containers:
- name: nginx
image: anolis-registry.cn-zhangjiakou.cr.aliyuncs.com/openanolis/nginx:1.14.1-8.6
command: ["sleep", "infinity"]
ports:
- containerPort: 80
Une fois le pod créé, vérifiez que les annotations et les libellés ont bien été injectés :
kubectl get pod nginx -n dev-ns -o yaml
Dans la sortie, confirmez que l'annotation network.alibabacloud.com/custom-dnsconfig et le libellé created-by-acs=true apparaissent sous metadata.
