Restringir endereços IP que podem ser atribuídos a serviços. - Amazon EKS

Restringir endereços IP que podem ser atribuídos a serviços.

Os serviços do Kubernetes podem ser acessados de um cluster por meio de:

  • um endereço IP de cluster atribuído automaticamente pelo Kubernetes

  • Qualquer endereço IP que você especificar para a propriedade externalIPs em uma especificação de serviço. Os endereços IP externos não são gerenciados pelo Kubernetes e são da responsabilidade do administrador do cluster. Endereços IP externos especificados com externalIPs são diferentes do endereço IP externo atribuído a um serviço do tipo LoadBalancer por um provedor de nuvem.

Para saber mais sobre os serviços do Kubernetes, consulte Services (Serviços) na documentação do Kubernetes. Você pode restringir os endereços IP que podem ser especificados para externalIPsem uma especificação de serviço.

  1. Implante cert-manager para gerenciar certificados do webhook. Para obter mais informações, consulte a documentação cert-manager.

    kubectl apply -f https://github.com/jetstack/cert-manager/releases/download/v1.5.4/cert-manager.yaml
  2. Verifique se cert-manager Pods estão em execução.

    kubectl get pods -n cert-manager

    Veja um exemplo de saída abaixo.

    NAME READY STATUS RESTARTS AGE cert-manager-58c8844bb8-nlx7q 1/1 Running 0 15s cert-manager-cainjector-745768f6ff-696h5 1/1 Running 0 15s cert-manager-webhook-67cc76975b-4v4nk 1/1 Running 0 14s
  3. Analise os serviços existentes para garantir que nenhum deles tenha endereços IP externos atribuídos a eles que não estejam contidos no bloco CIDR, ao qual você deseja limitar os endereços.

    kubectl get services -A

    Veja um exemplo de saída abaixo.

    NAMESPACE NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE cert-manager cert-manager ClusterIP 10.100.102.137 <none> 9402/TCP 20m cert-manager cert-manager-webhook ClusterIP 10.100.6.136 <none> 443/TCP 20m default kubernetes ClusterIP 10.100.0.1 <none> 443/TCP 2d1h externalip-validation-system externalip-validation-webhook-service ClusterIP 10.100.234.179 <none> 443/TCP 16s kube-system kube-dns ClusterIP 10.100.0.10 <none> 53/UDP,53/TCP 2d1h my-namespace my-service ClusterIP 10.100.128.10 192.168.1.1 80/TCP 149m

    Se qualquer um dos valores for endereços IP que não estiverem dentro do bloco ao qual você deseja restringir o acesso, você precisará alterar os endereços para que fiquem dentro do bloco e reimplantar os serviços. Por exemplo, o serviço my-service na saída anterior tem um endereço IP externo atribuído a ele que não está dentro do exemplo de bloco CIDR na etapa 5.

  4. Faça download do manifesto de webhook IP externo. Você também pode visualizar o source code for the webhook (código-fonte para webhook) no GitHub.

    curl -O https://s3.us-west-2.amazonaws.com/amazon-eks/docs/externalip-webhook.yaml
  5. Especifique blocos CIDR. Abra o arquivo baixado em seu editor e remova o \# no início das linhas a seguir.

    #args: #- --allowed-external-ip-cidrs=10.0.0.0/8

    Substitua 10.0.0.0/8 pelo seu próprio bloco CIDR. Especifique quantos blocos quiser. Se especificar vários blocos, adicione uma vírgula entre eles.

  6. Se o seu cluster não estiver na região us-west-2 AWS, substitua us-west-2, 602401143452 e amazonaws.com no arquivo pelos seguintes comandos. Antes de executar os comandos, substitua region-code e 111122223333 pelo valor da sua região da AWS na lista em Exibir registros de imagens de contêineres da Amazon para complementos do Amazon EKS.

    sed -i.bak -e 's|602401143452|111122223333|' externalip-webhook.yaml sed -i.bak -e 's|us-west-2|region-code|' externalip-webhook.yaml sed -i.bak -e 's|amazonaws.com||' externalip-webhook.yaml
  7. Aplique o manifesto ao cluster.

    kubectl apply -f externalip-webhook.yaml

    Ocorrerá uma falha na tentativa de implantar um serviço no cluster com um endereço IP especificado para externalIPs que não estiver contido nos blocos especificados na etapa Especificar blocos CIDR.