Em ambientes cloud com requisitos rigorosos de permissão, você pode precisar adicionar ou remover dinamicamente os endereços IP dos pods em listas de permissões específicas do ApsaraDB RDS para obter um controle de acesso refinado. Use o componente ack-kubernetes-webhook-injector para adicionar anotações aos pods, o que adiciona ou remove dinamicamente seus endereços IP das listas de permissões especificadas do ApsaraDB RDS. Este tópico descreve como instalar e usar o ack-kubernetes-webhook-injector para configurar dinamicamente listas de permissões para services do Alibaba Cloud e como configurar o acesso aos seus endpoints internos.
Pré-requisitos
O cluster usa o plug-in de rede Terway. Para mais informações, consulte Use the Terway network plug-in.
Visão geral
No cloud computing, certos recursos exigem políticas de segurança antes de serem acessados por fontes externas. Por exemplo, uma instância pode exigir uma política de controle de acesso do Server Load Balancer (SLB), ou um banco de dados ApsaraDB RDS pode exigir uma lista de permissões de endereços IP de origem do cliente. Embora você possa adicionar o intervalo de endereços IP dos nós do seu cluster a uma lista de permissões específica do ApsaraDB RDS ao criar um cluster ACK, essa abordagem apresenta as seguintes desvantagens:
As regras da lista de permissões são muito genéricas. Os blocos CIDR de IP na lista de permissões cobrem os endereços IP de todos os nós e pods no cluster.
As regras da lista de permissões precisam ser limpas manualmente após a exclusão do cluster.
Para resolver esses problemas, o ACK fornece o ack-kubernetes-webhook-injector. Esse componente adiciona dinamicamente o endereço IP de um pod especificado a uma lista de permissões do ApsaraDB RDS quando o pod é criado e remove o endereço IP quando o pod é excluído. Isso permite um controle refinado sobre as políticas de segurança.
Atualmente, o ack-kubernetes-webhook-injector oferece os seguintes recursos:
Adiciona e remove automaticamente o endereço IP de um pod em um grupo de políticas de controle de acesso do SLB especificado conforme o pod é criado e excluído.
Adiciona e remove automaticamente o endereço IP de um pod em uma lista de permissões do ApsaraDB for Redis especificada conforme o pod é criado e excluído.
Adiciona e remove automaticamente o endereço IP de um pod em uma lista de permissões do ApsaraDB RDS especificada conforme o pod é criado e excluído.
Instale o ack-kubernetes-webhook-injector
Faça login no ACK console. No painel de navegação à esquerda, clique em .
Encontre e clique em ack-kubernetes-webhook-injector e, em seguida, clique em Deploy no canto superior direito.
No painel exibido, selecione o cluster de destino e o Namespace, defina um Release Name e clique em Next.
-
Selecione uma Chart Version. Na página Parameters, preencha os campos
akeskna seçãoopenapicom suas informações de AccessKey e clique em OK na parte inferior da página.Para mais informações sobre como obter um par de AccessKey, consulte Obtain an AccessKey pair.
openapi: # For test only. DO NOT use aksk authentication in production environments. use_aksk: true ak: sk:
Exemplo: Adicione dinamicamente o IP de um pod a uma lista de permissões do RDS
Na especificação do pod da sua workload, use uma anotação para especificar o ID da instância do ApsaraDB RDS e o nome do grupo da lista de permissões ao qual o pod precisa ingressar. Quando o pod é criado, o ack-kubernetes-webhook-injector adiciona o endereço IP do pod à lista de permissões. Quando o pod é excluído, o componente remove o endereço IP.
A anotação do pod para uma lista de permissões do ApsaraDB RDS deve incluir o seguinte:
ID da instância do ApsaraDB RDS:
ack.aliyun.com/rds_idNome do grupo da lista de permissões do ApsaraDB RDS:
ack.aliyun.com/white_list_name
Esta seção demonstra como usar o ack-kubernetes-webhook-injector para adicionar dinamicamente um pod a uma lista de permissões do ApsaraDB RDS.
-
Crie um Deployment usando o seguinte modelo YAML. Na definição do pod, adicione anotações para o ID da instância do ApsaraDB RDS e o nome do grupo da lista de permissões.
apiVersion: apps/v1 kind: Deployment metadata: labels: app: inject-test name: inject-test spec: replicas: 1 selector: matchLabels: app: inject-test template: metadata: annotations: ack.aliyun.com/rds_id: <rm-wz9nanjcud75b****> ack.aliyun.com/white_list_name: <rds_group> labels: app: inject-test spec: containers: - command: - sleep - "3600" image: alpine:latest name: inject-test -
Execute o seguinte comando para visualizar o endereço IP do pod.
kubectl --kubeconfig .kube/config_sts_test -n inject-test get pod -o wideSaída de exemplo:
NAME READY STATUS RESTARTS AGE IP NODE inject-test-68cc8f9bbf-gj86n 1/1 Running 0 22s 172.25.0.28 cn-hangzhou.xxxNa saída, o endereço IP do pod é 172.25.0.28.
-
Faça login no ApsaraDB RDS console e visualize a lista de permissões da instância do ApsaraDB RDS especificada na anotação. Para mais informações sobre como visualizar uma lista de permissões do ApsaraDB RDS, consulte Enhanced IP address whitelist mode.
-
Defina o número de réplicas do Deployment criado em Step 1 como 0 e verifique novamente a lista de permissões do ApsaraDB RDS.
O endereço IP é removido automaticamente da lista de permissões.
Configure o acesso a endpoints internos
Por padrão, o ack-kubernetes-webhook-injector usa os endpoints públicos dos services do Alibaba Cloud. Se o seu cluster não tiver o acesso à rede pública ativado, modifique a configuração para usar endpoints internos.
Alguns services do Alibaba Cloud não fornecem endpoints internos em todas as regiões. Antes de continuar, verifique o OpenAPI Explorer para confirmar se um endpoint interno está disponível para o seu service de destino em sua região.
Faça login no ACK console. No painel de navegação à esquerda, clique em Clusters.
Na página Clusters, clique no nome do seu cluster. No painel de navegação à esquerda, clique em .
Na lista suspensa Namespace na parte superior da página, selecione kube-system. Encontre o Deployment kubernetes-webhook-injector. Na coluna Actions, escolha .
Em spec.template.spec.containers.command, adicione a linha
- '--intranet-access'e clique em Update.
Outras configurações de política de segurança
O ack-kubernetes-webhook-injector também oferece suporte às seguintes configurações de política de segurança:
Controle de acesso do SLB:
ack.aliyun.com/access_control_policy_id.-
Configuração da lista de permissões do ApsaraDB for Redis:
ID do Redis:
ack.aliyun.com/redis_id.Grupo da lista de permissões do Redis:
ack.aliyun.com/redis_white_list_name.
Desinstale o ack-kubernetes-webhook-injector
Se você não precisar mais do ack-kubernetes-webhook-injector, remova-o usando o recurso de gerenciamento de releases no ACK. Para mais informações, consulte Manage Helm releases. Em seguida, execute os seguintes comandos para remover os recursos de configuração restantes:
kubectl -n kube-system delete secret kubernetes-webhook-injector-certs
kubectl delete mutatingwebhookconfigurations.admissionregistration.k8s.io kubernetes-webhook-injector