

 **Ajudar a melhorar esta página** 

Para contribuir com este guia de usuário, escolha o link **Editar esta página no GitHub**, disponível no painel direito de cada página.

# Restringir endereços IP externos que podem ser atribuídos aos serviços
<a name="restrict-service-external-ip"></a>

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](https://kubernetes.io/docs/concepts/services-networking/service/) (Serviços) na documentação do Kubernetes. Você pode restringir os endereços IP que podem ser especificados para `externalIPs`em 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](https://cert-manager.io/docs/).

   ```
   kubectl apply -f https://github.com/jetstack/cert-manager/releases/download/v1.5.4/cert-manager.yaml
   ```

1. Verifique se os pods `cert-manager` 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
   ```

1. 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.

1. Faça download do manifesto de webhook IP externo. Você também pode visualizar o [source code for the webhook](https://github.com/kubernetes-sigs/externalip-webhook) (código-fonte para webhook) no GitHub.

   ```
   curl -O https://s3.us-west-2.amazonaws.com/amazon-eks/docs/externalip-webhook.yaml
   ```

1. 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.

1. 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](add-ons-images.md).

   ```
   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
   ```

1. 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.