Saltar al contenido

¿Por qué no puedo conectarme a mi clúster de Amazon EKS?

6 minutos de lectura
0

He creado un clúster de Amazon Elastic Kubernetes Service (Amazon EKS), pero no puedo conectarme a él.

Descripción corta

Es posible que no puedas conectarte al clúster de Amazon EKS por uno de los siguientes motivos:

  • No has creado el archivo kubeconfig para tu clúster.
  • No puedes conectarte al punto de enlace del servidor de la API de Amazon EKS.

Resolución

Nota: Si se muestran errores al ejecutar comandos de la Interfaz de la línea de comandos de AWS (AWS CLI), consulta Solución de problemas de AWS CLI. Además, asegúrate de utilizar la versión más reciente de la AWS CLI.

No has creado el archivo kubeconfig

Tras crear el clúster de Amazon EKS, configura el archivo kubeconfig de modo que puedas usar la línea de comandos kubectl para conectarte al clúster. El archivo kubeconfig contiene la configuración del clúster de Kubernetes.

Según tu sistema operativo (SO), puedes encontrar tu archivo kubeconfig en las siguientes ubicaciones:

  • Para Linux o macOS, ve a $HOME/.kube/config.
  • Para Windows, ve a %USERPROFILE%\.kube\config.

Para usar una ubicación de archivo diferente, realiza una de las siguientes acciones:

  • Establece la variable de entorno KUBECONFIG para que apunte a la nueva ubicación.
  • Usa la marca**--kubeconfig** cuando ejecutes comandos de kubectl para especificar una ruta de archivo personalizada.

Si ya existe un archivo kubeconfig en la ubicación predeterminada, Amazon EKS combina las nuevas configuraciones con el archivo existente. Puedes usar el comando kubectl config para administrar los contextos de tu clúster. Para obtener más información, consulta kubectl config en el sitio web de Kubernetes.

No puedes conectarte al punto de enlace del servidor de la API de Amazon EKS

Para solucionar este problema, sigue estos pasos:

  1. Para comprobar si puedes conectarte a la URL del servidor de API de Amazon EKS, ejecuta el siguiente comando con más detalle:

    kubectl get svc --v=9

    El resultado del comando muestra información detallada sobre la conexión, incluida la URL del servidor de API que utiliza la conexión. Comprueba las direcciones IP que aparecen en la lista para Seguimiento HTTP: búsqueda de DNS.
    Resultado de ejemplo:

    I0110 16:43:36.920095   48173 loader.go:373] Config loaded from file:  /Users/abs/.kube/configI0110 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. Para comprobar si el servidor de API de Amazon EKS es de acceso público, ejecuta el siguiente comando describe-cluster de la AWS CLI:

    aws eks describe-cluster --name cluster_name --region example_region --query cluster.resourcesVpcConfig

    Nota: Sustituye cluster_name por el nombre de tu clúster y example_region por tu región de AWS.
    Resultado de ejemplo:

    {    "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"
        ]
    }

    Para permitir el acceso público, asegúrate de que endpointPublicAccess sea verdadero. Para mantener el acceso privado, asegúrate de que endpointPublicAccess sea falso. Si endpointPublicAccess es falso, continúa con el paso 9. Si endpointPublicAccess es verdadero, se recomienda limitar endpointPublicAccess a intervalos de direcciones IP específicos. Completa los pasos 3 a 8 para agregar las direcciones IP permitidas a la lista de direcciones permitidas de publicAccessCidrs.

  3. Abre la consola de Amazon EKS.

  4. Elige Clústeres y, a continuación, selecciona el clúster que deseas actualizar.

  5. Selecciona la pestaña Redes y, a continuación, selecciona Administrar redes.

  6. Elige Público.

  7. En Configuración avanzada, para el bloqueo de CIDR, introduce el intervalo de CIDR público que deseas agregar a la lista de permitidos.
    Importante: Incluye la dirección IP de la puerta de enlace de NAT que utilizan los nodos de trabajo de tus subredes privadas para acceder a Internet. Además, incluye las direcciones IP de todos los componentes de red de los dispositivos NAT.

  8. Selecciona Guardar cambios.

  9. Si has configurado el servidor de API del clúster en modo solo privado, asegúrate de que la solicitud de kubectl proviene de la red del clúster. Si tu solicitud de kubectl proviene de fuera de tu Amazon Virtual Private Cloud (Amazon VPC), recibirás el siguiente error de tiempo de espera al ejecutar el comando get svc:

    $ kubectl get svc --v=9I0110 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
  10. Actualiza el grupo de seguridad del clúster para agregar la dirección IP de origen o el intervalo de CIDR a tu lista de permitidos. Esto permite que el cliente kubectl se conecte al punto de enlace del servidor de API de Amazon EKS desde la VPC del clúster.

Información relacionada

Solución de problemas con los clústeres y nodos de Amazon EKS

¿Cómo soluciono el error al conectarme al servidor de API de Amazon EKS?"You must be logged in to the server (Unauthorized)"

Desmitificar las redes de clústeres para los nodos de trabajo de Amazon EKS

¿Cómo puedo bloquear el acceso de la API a direcciones IP específicas de mi clúster de Amazon EKS?