Configuración del Amazon VPC CNI plugin for Kubernetes con grupos de seguridad para los Pods de Amazon EKS - Amazon EKS

Configuración del Amazon VPC CNI plugin for Kubernetes con grupos de seguridad para los Pods de Amazon EKS

Si utiliza Pods con instancias de Amazon EC2, debe configurar el Amazon VPC CNI plugin for Kubernetes con los grupos de seguridad.

Si solo utiliza Pods de Fargate y no tiene nodos de Amazon EC2 en su clúster, consulte Utilización de una política de grupo de seguridad para un Pod de Amazon EKS.

  1. Verifique su versión del Amazon VPC CNI plugin for Kubernetes actual con el siguiente comando:

    kubectl describe daemonset aws-node --namespace kube-system | grep amazon-k8s-cni: | cut -d : -f 3

    Un ejemplo de salida sería el siguiente.

    v1.7.6

    Si su versión del Amazon VPC CNI plugin for Kubernetes es anterior a la 1.7.7, actualice el complemento a la versión 1.7.7 o posterior. Para obtener más información, consulte CNI de Amazon VPC

  2. Agregue la política de IAM administrada AmazonEKSVPCResourceController al rol de clúster asociado al clúster de Amazon EKS. La política permite que el rol administre las interfaces de red, sus direcciones IP privadas y su vinculación y desvinculación desde y hacia las instancias de red.

    1. Recupere el nombre del rol de IAM de su clúster y guárdelo en una variable. Reemplace my-cluster por el nombre de su clúster.

      cluster_role=$(aws eks describe-cluster --name my-cluster --query cluster.roleArn --output text | cut -d / -f 2)
    2. Asocie la política de al rol.

      aws iam attach-role-policy --policy-arn arn:aws:iam::aws:policy/AmazonEKSVPCResourceController --role-name $cluster_role
  3. Habilite el complemento CNI de Amazon VPC para administrar las interfaces de red de los Pods al establecer la variable ENABLE_POD_ENI en true en el aws-node DaemonSet. Una vez que esta configuración se establece en true, el complemento crea un recurso personalizado cninode para cada nodo del clúster. El controlador de recursos de VPC crea y adjunta una interfaz de red especial denominada interfaz de red troncal con la descripción aws-k8s-trunk-eni.

    kubectl set env daemonset aws-node -n kube-system ENABLE_POD_ENI=true
    nota

    La interfaz de red troncal se incluye en el número máximo de interfaces de red que admite el tipo de instancia. A fin de obtener una lista del número máximo de interfaces de red que admite cada tipo de instancia, consulte Direcciones IP por interfaz de red por tipo de instancia en la Guía del usuario de Amazon EC2. Si su nodo ya cuenta con el número máximo de interfaces de red estándar adjuntas, el controlador de recursos de VPC reservará un espacio. Tendrá que reducir verticalmente los Pods en ejecución lo suficiente para que el controlador desconecte y elimine una interfaz de red estándar, cree la interfaz de red troncal y la adjunte a la instancia.

  4. Si desea ver cuál de sus nodos tiene un recurso personalizado CNINode establecido, utilice el siguiente comando. Si se devuelve No resources found, espere varios segundos e inténtelo de nuevo. El paso anterior requiere reiniciar los pods de Amazon VPC CNI plugin for Kubernetes, lo cual tarda varios segundos.

    $ kubectl get cninode -A NAME FEATURES ip-192-168-64-141.us-west-2.compute.internal [{"name":"SecurityGroupsForPods"}] ip-192-168-7-203.us-west-2.compute.internal [{"name":"SecurityGroupsForPods"}]

    Si utiliza versiones de CNI de VPC anteriores a 1.15, se utilizaron etiquetas de nodo en lugar del recurso personalizado CNINode. Si desea ver cuál de sus nodos tienen la etiqueta de nodo aws-k8s-trunk-eni establecida en true, utilice el siguiente comando. Si se devuelve No resources found, espere varios segundos e inténtelo de nuevo. El paso anterior requiere reiniciar el Amazon VPC CNI plugin for Kubernetes Pods, lo cual tarda varios segundos.

    kubectl get nodes -o wide -l vpc.amazonaws.com/has-trunk-attached=true -

    Una vez que se crea la interfaz de red troncal, se pueden asignar direcciones IP secundarias a los Pods desde las interfaces de red troncales o estándar. La interfaz troncal se elimina de forma automática si se elimina el nodo.

    Cuando implementa un grupo de seguridad para un Pod en un paso posterior, el controlador de recursos de VPC crea una interfaz de red especial denominada interfaz de red de ramificación con una descripción de aws-k8s-branch-eni y les asocia los grupos de seguridad. Se crean las interfaces de red de ramificación además de las interfaces de red estándar y troncal adjuntas al nodo.

    Si utiliza sondeos de estado o preparación, también necesita desactivar el demux temprano de TCP, de modo que el kubelet pueda conectarse a los Pods en las interfaces de red de ramificación a través de TCP. Para desactivar el demux temprano de TCP, ejecute el siguiente comando:

    kubectl patch daemonset aws-node -n kube-system \ -p '{"spec": {"template": {"spec": {"initContainers": [{"env":[{"name":"DISABLE_TCP_EARLY_DEMUX","value":"true"}],"name":"aws-vpc-cni-init"}]}}}}'
    nota

    Si utiliza la versión 1.11.0 o posterior del complemento Amazon VPC CNI plugin for Kubernetes y lo establece en POD_SECURITY_GROUP_ENFORCING_MODE=standard, como se describe en el siguiente paso, no es necesario ejecutar el comando anterior.

  5. Si su clúster usa NodeLocal DNSCache o desea usar la política de red de Calico con los Pods que tienen sus propios grupos de seguridad, o si tiene servicios de Kubernetes de tipo NodePort y LoadBalancer mediante los destinos de instancia con una externalTrafficPolicy establecida en Local para Pods a los que desea asignar grupos de seguridad, debe usar la versión 1.11.0 o posterior del complemento Amazon VPC CNI plugin for Kubernetes y habilitar la siguiente configuración:

    kubectl set env daemonset aws-node -n kube-system POD_SECURITY_GROUP_ENFORCING_MODE=standard

    IMPORTANTE: Las reglas del grupo de seguridad del Pod no se aplican al tráfico entre Pods o entre Pods y services, como kubelet o nodeLocalDNS, que se encuentran en el mismo nodo. Los pods que utilizan diferentes grupos de seguridad en el mismo nodo no pueden comunicarse porque están configurados en diferentes subredes y el enrutamiento está deshabilitado entre estas subredes. Tráfico saliente de los Pods a direcciones fuera de la VPC es la dirección de red traducida a la dirección IP de la interfaz de red principal de la instancia (a menos que también haya configurado AWS_VPC_K8S_CNI_EXTERNALSNAT=true). Para este tráfico, se utilizan las reglas de los grupos de seguridad de la interfaz de red principal, en lugar de las reglas de los grupos de seguridad de los Pod’s. ** Para que esta configuración se aplique a los Pods existentes, debe reiniciar los Pods o los nodos en que se están ejecutando los Pods.

  6. Para ver cómo utilizar una política de grupo de seguridad para su Pod, consulte Utilización de una política de grupo de seguridad para un Pod de Amazon EKS.