O acs-profile é um ConfigMap no nível do cluster que injeta automaticamente configurações de rede e DNS nos pods do ACS durante a criação. Em vez de adicionar IDs de vSwitch, IDs de grupo de segurança ou configurações de DNS em cada YAML de carga de trabalho, defina esses padrões uma única vez no acs-profile e o ACS os aplicará de forma transparente.
Como funciona
Ao criar um pod, o ACS lê o ConfigMap chamado acs-profile no namespace kube-system e mescla os padrões configurados na especificação do pod. Não é necessário reiniciar o componente acs-virtual-node ao atualizar o ConfigMap.
Comportamento da atualização:
Novos pods: as configurações atualizadas entram em vigor imediatamente.
Pods existentes: as novas configurações só são aplicadas após uma atualização contínua (rolling update).
O acs-profile oferece suporte a dois tipos de configuração:
Parâmetros de cluster: configurações padrão de rede aplicadas a todos os pods do ACS (IDs de vSwitch, grupo de segurança, VPC e modo de resolução de DNS).
Seletores: regras baseadas em rótulos que injetam anotações e rótulos adicionais nos pods correspondentes a critérios específicos.
Pré-requisitos
Antes de começar, verifique se você tem:
Um cluster ACS com o componente acs-virtual-node implantado.
O
kubectlconfigurado com acesso ao cluster.Permissão para ler e editar ConfigMaps no namespace
kube-system.
Visualize a configuração atual
Execute o comando a seguir para visualizar o acs-profile atual:
kubectl get cm -n kube-system acs-profile -o yaml
Um acs-profile padrão tem a seguinte estrutura:
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: ""
Atualize os parâmetros do cluster
Os parâmetros de cluster no acs-profile definem o ambiente de rede padrão para todos os pods do ACS. Pods que não definem explicitamente esses valores os herdam do perfil.
Edite o ConfigMap com o kubectl:
kubectl edit configmap acs-profile -n kube-system
Como alternativa, use o console do ACS:
Faça login no console do ACS.
Na página Clusters, clique em Clusters e clique no nome do seu cluster.
No painel de navegação à esquerda, escolha Configurations > ConfigMaps.
Selecione kube-system na lista suspensa de namespaces.
Localize acs-profile e clique em Edit YAML.
A tabela a seguir descreve os parâmetros atualizáveis:
|
Parâmetro |
Exemplo |
Descrição |
|
|
|
Grupo de segurança dos pods do ACS. Controla as regras de tráfego de entrada e saída para todos os pods que usam este perfil. |
|
|
|
IDs dos vSwitches associados aos pods do ACS. Separe múltiplos IDs por vírgulas. Determina as sub-redes onde os pods serão iniciados. |
|
|
|
Virtual Private Cloud (VPC) onde os pods do ACS são implantados. Deve corresponder à VPC dos vSwitches especificados. |
|
|
|
Define se o PrivateZone será usado para resolução de nomes de domínio. Defina como |
Estes são padrões no nível do cluster. Uma especificação de pod que defina explicitamente qualquer um desses valores terá precedência sobre os padrões do acs-profile.
Solucione erros de configuração
Caso exista um erro de formatação no acs-profile após uma edição, a configuração não entrará em vigor. O ACS registra o erro como um evento do Kubernetes. Execute o comando abaixo para visualizar os detalhes do erro:
kubectl -n kube-system get event --field-selector involvedObject.namespace=kube-system,involvedObject.name=acs-profile
Configure seletores
Os seletores permitem injetar anotações e rótulos adicionais em pods específicos com base em seus namespaces ou rótulos, sem modificar os arquivos YAML desses pods.
Durante a criação de um pod, o ACS avalia cada seletor sequencialmente. Para cada seletor cujos critérios correspondam ao pod, o ACS mescla as configurações de effect (anotações e rótulos) no pod. Anotações e rótulos já presentes nunca são sobrescritos.
Parâmetros do seletor
|
Parâmetro |
Obrigatório |
Descrição |
|
|
Sim |
Nome exclusivo para o seletor. |
|
|
Não |
Filtra pods pelos rótulos de seu namespace. |
|
|
Não |
Regra de correspondência no formato |
|
|
Não |
Lista de requisitos do seletor. Operadores válidos: |
|
|
Não |
Filtra pods pelos rótulos do próprio pod. |
|
|
Não |
Regra de correspondência no formato |
|
|
Não |
Lista de requisitos do seletor. Usa os mesmos operadores de |
|
|
Não |
Anotações e rótulos a serem injetados nos pods correspondentes. |
O namespaceSelector e o objectSelector usam lógica AND. Quando ambos estão configurados, o pod deve satisfazer as duas condições para haver correspondência. Configure pelo menos um deles para cada seletor. Se nenhum for configurado, mas o effect estiver definido, o efeito será aplicado a todos os pods do ACS no cluster.
Prioridade do seletor
Se múltiplos seletores corresponderem ao mesmo pod, o ACS os aplicará na ordem em que aparecem no array selectors. As anotações e rótulos injetados seguem esta prioridade:
Anotações e rótulos existentes no pod (maior prioridade — nunca sobrescritos).
As configurações de
effectdo primeiro seletor correspondente.As configurações de
effectdos seletores correspondentes subsequentes.
Exemplo
O acs-profile a seguir usa um seletor chamado selector-demo1 para injetar uma configuração personalizada de DNS em pods que atendem a critérios específicos de rótulos:
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"
}
}
}
]
Funcionamento deste seletor: qualquer pod no namespace dev-ns que tenha tanto o rótulo acs=true quanto o rótulo usage=testing receberá:
Anotação:
network.alibabacloud.com/custom-dnsconfigcom os servidores DNS114.114.114.114e8.8.8.8, domínios de buscaxx.comeyy.com, e opçõesndots:2eedns0.Rótulo:
created-by-acs=true.
Para verificar se o seletor funciona corretamente, crie um pod que atenda aos critérios:
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
Após criar o pod, verifique se as anotações e rótulos foram injetados:
kubectl get pod nginx -n dev-ns -o yaml
Na saída do comando, confirme se a anotação network.alibabacloud.com/custom-dnsconfig e o rótulo created-by-acs=true aparecem em metadata.
