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 comexternalIPs
são diferentes do endereço IP externo atribuído a um serviço do tipoLoadBalancer
por um provedor de nuvem.
Para saber mais sobre os serviços do Kubernetes, consulte ServicesexternalIPs
em uma especificação de serviço.
-
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
-
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
-
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. -
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
-
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. -
Se o seu cluster não estiver na região
us-west-2
AWS, substituaus-west-2
,602401143452
eamazonaws.com
no arquivo pelos seguintes comandos. Antes de executar os comandos, substituaregion-code
e111122223333
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
-
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.