¿Por qué no me puedo conectar a mi clúster de Amazon EKS?
He creado un clúster de Amazon Elastic Kubernetes Service (Amazon EKS), pero no puedo conectarme a mi clúster.
Descripción breve
Es posible que no pueda conectarse a su clúster de EKS por alguno de los siguientes motivos:
- No creó el archivo kubeconfig para el clúster.
- No puede conectarse al punto de conexión del servidor de la API de Amazon EKS.
Solución
No creó el archivo kubeconfig
Una vez que cree el clúster de Amazon EKS, deberá configurar el archivo kubeconfig con la Interfaz de la línea de comandos de AWS (AWS CLI). Esta configuración le permite conectarse a su clúster mediante la línea de comandos de kubectl. La siguiente resolución muestra cómo crear un archivo kubeconfig para su clúster con el comando update-kubeconfig de la AWS CLI. Para actualizar de forma manual el archivo kubeconfig sin utilizar la AWS CLI, consulte Creación o actualización de un archivo kubeconfig para un clúster de Amazon EKS. Nota: Si recibe errores al ejecutar comandos de la AWS CLI, asegúrese de que está utilizando la versión más reciente de la AWS CLI.
1. Verifique que la versión 1.16.308 o posterior de la AWS CLI esté instalada en su sistema:
$ aws --version
Importante: Debe tener instalada en su sistema la versión 2.7.9 o posterior de Python. De lo contrario, recibirá un error.
Consejo: Utilice administradores de paquetes como yum, apt-get o homebrew para macOS para instalar la AWS CLI.
2. Compruebe la identidad actual para verificar que está utilizando las credenciales correctas con permisos para el clúster de Amazon EKS:
aws sts get-caller-identity
Nota: El usuario o rol de la entidad de AWS Identity and Access Management (IAM) que crea un clúster de Amazon recibe automáticamente los permisos cuando se crea el clúster. Estos permisos se conceden en la configuración RBAC del clúster en el plano de control. Los usuarios o roles de IAM también pueden conseguir acceso a un clúster de Amazon EKS desde aws-auth ConfigMap. De manera predeterminada, el AWS IAM Authenticator para Kubernetes utiliza la AWS CLI configurada o la identidad del AWS SDK. Para obtener más información, consulte Habilitación del acceso de usuarios y roles de IAM al clúster.
3. Cree o actualice el archivo kubeconfig para su clúster:
aws eks --region example_region update-kubeconfig --name cluster_name
Nota: Sustituya example_region por el nombre de su región de AWS. Sustituya cluster_name por el nombre de su clúster de EKS.
De forma predeterminada, el archivo de configuración para Linux se crea en la ruta de kubeconfig ($HOME/.kube/config) del directorio principal. El archivo también puede fusionarse con un kubeconfig existente en esa ubicación. En el caso de Windows, el archivo se encuentra en %USERPROFILE%.kube\config.
También puede especificar otra ruta si configura la variable de entorno KUBECONFIG (desde el sitio web de Kubernetes) o con la siguiente opción --kubeconfig:
$ kubectl get pods --kubeconfig ./.kube/config
Nota: Para obtener la autenticación cuando ejecute comandos de kubectl, puede especificar el nombre de recurso de Amazon (ARN) de un rol de IAM con la opción --role-arn. De lo contrario, se utilizará la entidad de IAM en su cadena de credenciales predeterminada de la AWS CLI o del AWS SDK. Para obtener más información, consulte update-kubeconfig. También puede completar el paso 6 de la sección Creación del archivo kubeconfig de forma manual de Creación o actualización de un archivo kubeconfig para un clúster de Amazon EKS.
4. Pruebe su configuración:
$ kubectl get svc
Salida de ejemplo:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE svc/kubernetes ClusterIP 10.100.0.1 <none> 443/TCP 1m
Nota: Si recibe otros errores de autorización o tipo de recursos, consulte Acceso denegado o no autorizado (kubectl).
No puede conectarse al punto de conexión del servidor de la API de Amazon EKS
1. Verifique que se está conectando a la URL correcta del servidor de la API de Amazon EKS. Para ello, active el nivel de detalle de kubectl y, a continuación, ejecute el siguiente comando:
$ kubectl get svc --v=9
El resultado es similar al siguiente:
I0110 16:43:36.920095 48173 loader.go:373] Config loaded from file: /Users/abs/.kube/config I0110 16:43:36.936844 48173 round_trippers.go:466] curl -v -XGET -H "Accept: application/json;as=Table;v=v1;g=meta.k8s.io,application/json;as=Table;v=v1beta1;g=meta.k8s.io,application/json" -H "User-Agent: kubectl/v1.26.0 (darwin/arm64) kubernetes/b46a3f8" 'https://S123GBNS3HJUFN467UFGH6782JHCH2891.yl4.us-east-2.eks.amazonaws.com//api/v1/namespaces/default/services?limit=500' I0110 16:43:37.362185 48173 round_trippers.go:495] HTTP Trace: DNS Lookup for S123GBNS3HJUFN467UFGH6782JHCH2891.yl4.us-east-2.eks.amazonaws.com/ resolved to [{18.119.155.77 } {3.136.153.3 }] I0110 16:43:37.402538 48173 round_trippers.go:510] HTTP Trace: Dial to tcp:18.119.155.77:443 succeed I0110 16:43:37.500276 48173 round_trippers.go:553] GET https://S123GBNS3HJUFN467UFGH6782JHCH2891.yl4.us-east-2.eks.amazonaws.com//api/v1/namespaces/default/services?limit=500 200 OK in 563 milliseconds I0110 16:43:37.500302 48173 round_trippers.go:570] HTTP Statistics: DNSLookup 1 ms Dial 40 ms TLSHandshake 44 ms ServerProcessing 52 ms Duration 563 ms I0110 16:43:37.500308 48173 round_trippers.go:577] Response Headers: I0110 16:43:37.500316 48173 round_trippers.go:580] Audit-Id: 37c17136-7fa7-40e9-8fe6-b24426e81564 I0110 16:43:37.500323 48173 round_trippers.go:580] Cache-Control: no-cache, private I0110 16:43:37.500329 48173 round_trippers.go:580] Content-Type: application/json I0110 16:43:37.500334 48173 round_trippers.go:580] X-Kubernetes-Pf-Flowschema-Uid: 508eb99e-d99b-44db-8ade-838c99fe8e9f I0110 16:43:37.500340 48173 round_trippers.go:580] X-Kubernetes-Pf-Prioritylevel-Uid: d324d3db-05ce-441b-a0ff-c31cbe8f696c I0110 16:43:37.500345 48173 round_trippers.go:580] Date: Tue, 10 Jan 2023 21:43:37 GMT
2. Verifique que el servidor de la API de Amazon EKS sea accesible públicamente ejecutando el siguiente comando:
$ aws eks describe-cluster --name cluster_name --region example_region --query cluster.resourcesVpcConfig
El resultado es similar al siguiente:
{ "subnetIds": [ "subnet-abc1", "subnet-abc2", "subnet-abc3", "subnet-abc4", "subnet-abc5", "subnet-abc6" ], "securityGroupIds": [ "sg-abc7" ], "clusterSecurityGroupId": "sg-abc7", "vpcId": "vpc-abc9", "endpointPublicAccess": true, "endpointPrivateAccess": false, "publicAccessCidrs": [ "0.0.0.0/0" ] }
3. En el resultado anterior, si endpointPublicAccess es true (verdadero), asegúrese de incluir en la lista de direcciones IP de origen permitidas a todas aquellas que figuran en la lista publicAccessCidrs. Para ello, haga lo siguiente:
- Abra la consola de Amazon EKS.
- Elija el clúster que desea actualizar.
- Elija la pestaña Networking (Redes) y, a continuación, elija Manage Networking (Administrar redes).
- Seleccione Public (Público).
- En Advanced settings (Configuración avanzada), para CIDR block (Bloque de CIDR), ingrese todo el rango de CIDR público que debe incluirse en la lista de direcciones permitidas.
- Seleccione Save changes (Guardar cambios).
En el resultado anterior, si endPointPrivateAccess es true (verdadero), asegúrese de que la solicitud de kubectl provenga de la red del clúster. Si la solicitud de kubectl no proviene de su nube de Amazon Virtual Private Cloud (Amazon VPC), aparecerá el siguiente error de tiempo de espera:
$ kubectl get svc --v=9 I0110 17:15:58.889798 50514 loader.go:373] Config loaded from file: /Users/example-user/.kube/config I0110 17:15:58.896715 50514 round_trippers.go:466] curl -v -XGET -H "Accept: application/json;as=Table;v=v1;g=meta.k8s.io,application/json;as=Table;v=v1beta1;g=meta.k8s.io,application/json" -H "User-Agent: kubectl/v1.26.0 (darwin/arm64) kubernetes/b46a3f8" 'https://S123GBNS3HJUFN467UFGH6782JHCH2891.yl4.us-east-2.eks.amazonaws.com/api/v1/namespaces/default/services?limit=500' I0110 17:15:59.374499 50514 round_trippers.go:495] HTTP Trace: DNS Lookup for S123GBNS3HJUFN467UFGH6782JHCH2891.yl4.us-east-2.eks.amazonaws.com resolved to [{192.168.126.17 } {192.168.144.26 }] I0110 17:16:14.285027 50514 round_trippers.go:508] HTTP Trace: Dial to tcp:192.168.126.17:443 failed: dial tcp 192.168.126.17:443: i/o timeout I0110 17:16:29.191768 50514 round_trippers.go:508] HTTP Trace: Dial to tcp:192.168.144.26:443 failed: dial tcp 192.168.144.26:443: i/o timeout I0110 17:16:29.196959 50514 round_trippers.go:553] GET https://S123GBNS3HJUFN467UFGH6782JHCH2891.yl4.us-east-2.eks.amazonaws.com/api/v1/namespaces/default/services?limit=500 in 30300 milliseconds I0110 17:16:29.197724 50514 round_trippers.go:570] HTTP Statistics: DNSLookup 183 ms Dial 14906 ms TLSHandshake 0 ms Duration 30300 ms I0110 17:16:29.197768 50514 round_trippers.go:577] Response Headers: I0110 17:16:29.199254 50514 helpers.go:264] Connection error: Get https://S123GBNS3HJUFN467UFGH6782JHCH2891.yl4.us-east-2.eks.amazonaws.com/api/v1/namespaces/default/services?limit=500: dial tcp 192.168.126.17:443: i/o timeout Unable to connect to the server: dial tcp 192.168.126.17:443: i/o timeout
Además, actualice el grupo de seguridad del clúster para asegurarse de que la IP de origen o el rango de CIDR estén en la lista de direcciones permitidas. Esto permite que el cliente de kubectl se conecte al punto de conexión del servidor de la API de Amazon EKS.
Información relacionada
Vídeos relacionados

Contenido relevante
- OFICIAL DE AWSActualizada hace un año
- OFICIAL DE AWSActualizada hace 10 meses
- OFICIAL DE AWSActualizada hace un año
- OFICIAL DE AWSActualizada hace 2 años