es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Exponer la API de Kubernetes dentro de Ingress.

Así que expuse mi API de Kubernetes a través de un servicio utilizando el siguiente comando.

kubectl -n kube-system expose pod kube-apiserver-master-node --name=apiserver --port 6443

Cuando describo el servicio, obtengo lo siguiente.

Nombre:              apiserver
Espacio de nombres:  kube-system
Etiquetas:           componente=kube-apiserver
                     nivel=control-plane
Anotaciones:         <ninguno>
Selector:            componente=kube-apiserver,nivel=control-plane
Tipo:                ClusterIP
Política de familia IP:  SingleStack
Familias IP:         IPv4
IP:                  10.105.200.112
IPs:                 10.105.200.112
Puerto:              <no asignado="">  6443/TCP
Puerto de destino:   6443/TCP
Puntos finales:       10.0.0.130:6443
Afinidad de sesión:  Ninguno
Eventos:             <ninguno>

Lo cual parece indicar que el servicio está funcionando correctamente.
Luego ejecuté este archivo YAML para añadir mi ingreso:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: main-ingress
  namespace: kube-system
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /
    kubernetes.io/ingress.class: nginx
    nginx.ingress.kubernetes.io/force-ssl-redirect: "true"
spec:
  tls:
  - hosts:
    - k8s.domain.com
    secretName: domain-tls
  rules:
  - host: "k8s.domain.com"
    http:
      paths:
  - pathType: Prefix
    path: "/"
    backend:
      service:
        name: apiserver
        port:
          number: 6443

Pero cuando intento acceder a k8s.domain.com, no funciona y me da una solicitud incorrecta (400). También intenté con el puerto 80 en la configuración del ingreso, pero tampoco funciona y me da un 503. Creo que me falta algo. He visto esta pregunta en Stackoverflow, pero no habla sobre cómo exponer el servicio a través del ingreso.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Parece que estás intentando exponer el servidor de la API de Kubernetes a través de un ingress pero estás teniendo problemas con ello. Aquí tienes algunas cosas que puedes probar:

    1. Asegúrate de que el controlador de ingress esté en ejecución en tu clúster. Puedes verificar esto ejecutando kubectl get pods --namespace=ingress-nginx. Si el controlador de ingress no está en ejecución, puedes instalarlo siguiendo las instrucciones aquí.
    2. Revisa los registros del pod del controlador de ingress para ver si hay algún error. Puedes hacer esto ejecutando kubectl logs nombre-del-pod-ingress-controller --namespace=ingress-nginx.

    3. Asegúrate de que se haya creado correctamente el recurso de ingress. Puedes verificar esto ejecutando kubectl get ingress main-ingress --namespace=kube-system. Si el ingress no se ha creado, verifica la salida del comando kubectl apply -f archivo-yaml-de-ingress.yml en busca de errores.

    4. Estás utilizando la anotación kubernetes.io/ingress.class: nginx, asegúrate de estar utilizando el controlador de ingress correcto. Si estás utilizando un controlador de ingress diferente, reemplaza nginx por el valor apropiado.

    5. Dado que estás utilizando SSL, asegúrate de que los certificados SSL sean válidos y estén configurados correctamente. Puedes verificar esto ejecutando kubectl describe secret domain-tls --namespace=kube-system.

    6. Intenta ver si puedes acceder directamente al servidor de la API de Kubernetes utilizando la dirección IP del servicio. Puedes hacer esto ejecutando `curl https://ip-del-servicio:6443`. Si esto funciona, entonces es probable que el problema esté en la configuración del ingress.

    Espero que esto te ayude a diagnosticar y solucionar tu problema. Hazme saber si tienes alguna pregunta adicional.

Comments are closed.