O acs-profile é um ConfigMap no nível do cluster que injeta automaticamente configurações de rede e dns nos pods do ACS no momento da criação. Em vez de adicionar IDs de vSwitch, IDs de grupo de segurança ou configurações de dns a cada yaml de carga de trabalho, você define esses padrões uma única vez no acs-profile e o ACS os aplica de forma transparente.
Como funciona
Quando o ACS cria um pod, ele 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 configurações atualizadas só entram em vigor após a execução de uma atualização contínua (rolling update).
O acs-profile oferece suporte a dois tipos de configuração:
Parâmetros do 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 que correspondem a critérios específicos.
Pré-requisitos
Antes de começar, certifique-se de ter:
Um cluster ACS com o componente acs-virtual-node implantado
O
kubectlconfigurado com acesso ao clusterPermissão para ler e editar ConfigMaps no namespace
kube-system
visualize a configuração atual
Agora, 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 apresenta 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 do cluster no acs-profile definem o ambiente de rede padrão para todos os pods do ACS. Os pods que não definem explicitamente esses valores os herdam do perfil.
Agora, edite o ConfigMap usando o kubectl:
kubectl edit configmap acs-profile -n kube-system
Como alternativa, use o console do ACS:
Acesse o ACS console.
Na página Clusters, clique em seu cluster.
No painel de navegação à esquerda, escolha Configurations > ConfigMaps.
Agora, selecione kube-system na lista suspensa de namespace.
Encontre acs-profile e clique em Edit YAML.
A tabela a seguir descreve os parâmetros que você pode atualizar:
|
Parâmetro |
Exemplo |
Descrição |
|
|
|
O grupo de segurança ao qual os pods do ACS pertencem. Controla as regras de tráfego de entrada e saída para todos os pods que usam este perfil. |
|
|
|
Os IDs de vSwitch a serem associados aos pods do ACS. Separe vários IDs com vírgulas. Determina em quais sub-redes os pods são iniciados. |
|
|
|
A virtual private cloud (VPC) onde os pods do ACS são implantados. Deve corresponder à VPC dos vSwitches especificados. |
|
|
|
Indica se o PrivateZone deve ser usado para resolução de nomes de domínio. Se necessário, defina como |
Estes são padrões no nível do cluster. A especificação de um pod que define explicitamente qualquer um desses valores tem precedência sobre os padrões do acs-profile.
Solucione erros de configuração
Se houver 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. Agora, execute o comando a seguir para visualizar os detalhes do erro:
kubectl -n kube-system get event --field-selector involvedObject.namespace=kube-system,involvedObject.name=acs-profile
configure os seletores
Os seletores permitem injetar anotações e rótulos adicionais em pods específicos com base em seus namespaces ou rótulos de pod, sem modificar os arquivos yaml desses pods.
Quando o ACS cria um pod, ele avalia cada seletor em ordem. Para cada seletor cujos critérios correspondem ao pod, o ACS mescla as configurações de effect (anotações e rótulos) no pod. As anotações e os rótulos já presentes no pod nunca são sobrescritos.
Parâmetros do seletor
|
Parâmetro |
Obrigatório |
Descrição |
|
|
Sim |
Um nome exclusivo para o seletor. |
|
|
Não |
Filtra os pods pelos rótulos em seu namespace. |
|
|
Não |
Regra de correspondência no formato |
|
|
Não |
Lista de requisitos do seletor. Operadores válidos: |
|
|
Não |
Filtra os pods pelos rótulos no próprio pod. |
|
|
Não |
Regra de correspondência no formato |
|
|
Não |
Lista de requisitos do seletor. Mesmos operadores de |
|
|
Não |
As anotações e os rótulos a serem injetados nos pods correspondentes. |
O namespaceSelector e o objectSelector usam a lógica AND — quando ambos são configurados, um pod deve atender a ambas as condições para haver correspondência. Configure pelo menos um deles para cada seletor. Se nenhum dos dois for configurado, mas o effect estiver definido, o efeito será aplicado a todos os pods do ACS no cluster.
Se vários seletores corresponderem ao mesmo pod, o ACS os aplicará na ordem em que aparecem no array selectors. As anotações e os rótulos injetados seguem esta prioridade:
Anotações e rótulos existentes no pod (prioridade mais alta — nunca sobrescritos)
As configurações de
effectdo primeiro seletor correspondenteAs configurações de
effectdos seletores correspondentes subsequentes
Exemplo
O acs-profile a seguir usa um seletor chamado selector-demo1 para injetar uma configuração de dns personalizada em pods que atendem a critérios de rótulo específicos:
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"
}
}
}
]
O que este seletor faz: Qualquer pod no namespace dev-ns que tenha tanto o rótulo acs=true quanto o rótulo usage=testing recebe:
Anotação:
network.alibabacloud.com/custom-dnsconfigcom os servidores dns114.114.114.114e8.8.8.8, domínios de pesquisaxx.comeyy.com, e opçõesndots:2eedns0Rótulo:
created-by-acs=true
Para testar, crie um pod que corresponda 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 a criação do pod, por favor, verifique se as anotações e os rótulos foram injetados:
kubectl get pod nginx -n dev-ns -o yaml
Na saída, confirme se a anotação network.alibabacloud.com/custom-dnsconfig e o rótulo created-by-acs=true aparecem em metadata.
