¿Por qué no puedo conectarme 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 corta
Es posible que no pueda conectarse al clúster de EKS por uno de los siguientes motivos:
- No ha creado el archivo kubeconfig para su clúster.
- No puede conectarse al punto de conexión del servidor de la API de Amazon EKS.
Solución
No ha creado el archivo kubeconfig
Tras crear el clúster de Amazon EKS, debe configurar el archivo kubeconfig mediante 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 kubectl. La siguiente solución muestra cómo crear un archivo kubeconfig para su clúster con el comando update-kubeconfig de AWS CLI. Para actualizar manualmente el archivo de kubeconfig sin utilizar AWS CLI, consulte Creating or updating a kubeconfig file for an Amazon EKS cluster.
Nota: Si recibe errores al ejecutar los comandos de AWS CLI, asegúrese de utilizar la versión más reciente de AWS CLI.
1. Compruebe que la versión 1.16.308 o posterior de AWS CLI esté instalada en su sistema:
$ aws --version
Importante: Debe tener la versión 2.7.9 o posterior de Python instalada en su sistema. De lo contrario, recibirá un error.
Consejo: Utilice administradores de paquetes como yum, apt-get o homebrew para macOS para instalar AWS CLI.
2. Compruebe la identidad actual para comprobar que está utilizando las credenciales correctas que tienen permisos para el clúster de Amazon EKS:
aws sts get-caller-identity
Nota: La entidad, el usuario o el 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 otorgan en la configuración de RBAC del clúster en el plano de control. Los usuarios o roles de IAM también pueden obtener acceso a un clúster de Amazon EKS en aws-auth ConfigMap. De forma predeterminada, el autenticador de AWS IAM para Kubernetes usa la identidad de AWS CLI o AWS SDK configurada. Para obtener más información, consulte cómo activar el acceso de usuarios y roles de IAM a su 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 con el nombre de su región de AWS. Sustituya cluster_name con el nombre de su clúster de EKS.
De forma predeterminada, el archivo de configuración para Linux se crea en la ruta kubeconfig ($HOME/.kube/config) de su directorio principal. El archivo también puede fusionarse con un kubeconfig existente en esa ubicación. Para Windows, el archivo está en %USERPROFILE%\.kube\config.
También puede especificar otra ruta configurando la variable de entorno KUBECONFIG (del sitio web de Kubernetes) o con la siguiente opción --kubeconfig:
$ kubectl get pods --kubeconfig ./.kube/config
Nota: Para la autenticación al ejecutar los comandos de kubectl, puede especificar un nombre de recurso de Amazon (ARN) para el rol de IAM con la opción --role-arn. De lo contrario, se utiliza la entidad de IAM de la cadena de credenciales de AWS CLI o AWS SDK predeterminada. Para obtener más información, consulte update-kubeconfig. O bien, complete el paso 6 de la sección Create kubeconfig file manually de Creating or updating a kubeconfig file for an Amazon EKS cluster.
4. Probar la configuración:
$ kubectl get svc
Resultado del 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 recurso, consulte Unauthorized or access denied (kubectl).
No puede conectarse al punto de conexión del servidor de la API de Amazon EKS
1. Compruebe que se está conectando a la URL correcta del servidor API de Amazon EKS. Para ello, active kubectl verbosity 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. Compruebe que el servidor API de Amazon EKS sea accesible de forma pública mediante la ejecución del 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, asegúrese de que permite incluir en la lista todas las direcciones IP de origen de la lista publicAccessCidrs. Para ello, haga lo siguiente:
- Abra la consola de Amazon EKS.
- Elija el clúster que desee actualizar.
- Seleccione la pestaña Redes y, a continuación, seleccione Administrar redes.
- Seleccione Público.
- En Configuración avanzada, para Bloqueo de CIDR, introduzca todo el rango de CIDR público que debe figurar en la lista de permitidos.
- Seleccione Guardar cambios.
En el resultado anterior, si endPointPrivateAccess es true, asegúrese de que la solicitud kubectl proviene de la red del clúster. Si su solicitud de kubectl proviene de fuera de su Amazon Virtual Private Cloud (Amazon VPC), recibirá 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 el rango de direcciones IP o CIDR de origen esté en la lista de permitidos. Esto permite que el cliente 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 2 años
- OFICIAL DE AWSActualizada hace un año
- OFICIAL DE AWSActualizada hace 2 años
- OFICIAL DE AWSActualizada hace 2 años