¿Cómo accedo al panel de control de Kubernetes mediante una ruta personalizada en Amazon EKS?

7 minutos de lectura
0

Quiero acceder al panel de control de Kubernetes en una ruta personalizada en Amazon Elastic Kubernetes Service (Amazon EKS).

Breve descripción

Para acceder al panel de control de Kubernetes, debe completar lo siguiente:

1.    Cree o utilice un certificado autofirmado existente y, a continuación, cárguelo en AWS Certificate Manager (ACM).

2.    Despliegue el controlador NGINX Ingress y, a continuación, expóngalo como un servicio NodePort.

3.    Cree un objeto Ingress para el controlador Ingress del equilibrador de carga de aplicación. Haga que el objeto Ingress reenvíe todas las solicitudes del equilibrador de carga de aplicación al controlador NGINX Ingress que desplegó mediante un archivo de manifiesto.

4.    Despliegue el panel de control de Kubernetes.

5.    Cree un objeto Ingress para el controlador NGINX Ingress.

Así es como funciona la resolución:

1.    El equilibrador de carga de aplicación reenvía todo el tráfico entrante al controlador NGINX Ingress.

2.    El controlador NGINX Ingress evalúa el patrón de ruta de la solicitud entrante (por ejemplo,/custom-path/additionalcustompath).

3.    El controlador NGINX Ingress reescribe la URL en /additionalcustompath antes de reenviar la solicitud al servicio kubernetes-dashboard.

Nota: Esta solución no funciona en clústeres que ejecuten versiones de kubernetes anteriores a la 1.19.

Resolución

Crear o usar un certificado autofirmado existente y, a continuación, cargarlo en ACM

Si su equilibrador de carga de aplicación usa un certificado ACM existente, vaya a «Desplegar el controlador NGINX Ingress y exponerlo como un servicio de NodePort».

Nota: Los siguientes pasos se aplican a la versión 2018.03 de Amazon Linux Amazon Machine Image (AMI).

1.    Genere un certificado autofirmado mediante OpenSSL:

openssl req -x509 -sha256 -nodes -days 365 -newkey rsa:2048 -keyout kube-dash-private.key -out kube-dash-public.crt

Importante: Proporcione un dominio completo para Nombre común. El equilibrador de carga de aplicación solo permite adjuntar al agente de escucha 443 certificados de ACM con nombres de dominio completos.

El resultado es similar al siguiente:

Country Name (2 letter code) [XX]:
State or Province Name (full name) []:
Locality Name (eg, city) [Default City]:
Organization Name (eg, company) [Default Company Ltd]:
Organizational Unit Name (eg, section) []:
Common Name (eg, your name or your server's hostname) []:kube-dashboard.com     ==>This is important
Email Address []:

3.    Instale la interfaz de la línea de comandos de AWS (AWS CLI) y configure las credenciales.

Nota: Si recibe errores al ejecutar los comandos de la AWS CLI,asegúrese de utilizar la versión más reciente de la AWS CLI.

4.    Cargue la clave privada y el certificado en ACM de su región de AWS:

aws acm import-certificate --certificate fileb://kube-dash-public.crt --private-key fileb://kube-dash-private.key --region us-east-1

Nota: Sustituya us-east-1 por su región de AWS.

El resultado es similar al siguiente:

{
"CertificateArn": "arn:aws:acm:us-east-1:your-account:certificate/your-certificate-id"
}

5.    Abra la consola de ACM y, a continuación, compruebe que el nombre de dominio aparece en el certificado ACM importado.

Nota: Si el nombre de dominio no aparece en la consola de ACM, se recomienda volver a crear el certificado con un nombre de dominio válido y completo.

Desplegar el controlador NGINX Ingress y exponerlo como un servicio de NodePort

1.    Cree el espacio de nombres ingress-nginx:

kubectl create ns ingress-nginx

2.    Instale la versión 3 de Helm.

3.    Utilice Helm para desplegar el controlador NGINX Ingress:

helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx
helm repo update
helm install nginx ingress-nginx/ingress-nginx --namespace ingress-nginx --set controller.service.type=NodePort

Nota: Para que el controlador nginx-ingress se ejecute en nodos de Fargate, defina allowPrivilegeEscalation: falso en el despliegue «nginx-ingress-nginx-controller».

Crear un objeto Ingress para el controlador Ingress del equilibrador de carga de aplicación

Cree un objeto Ingress mediante un archivo de manifiesto. Haga que el objeto Ingress reenvíe todas las solicitudes del controlador Ingress del equilibrador de carga de aplicación al controlador NGINX Ingress que desplegó anteriormente.

1.    Despliegue el controlador Ingress del equilibrador de carga de aplicación.

2.    Cree un objeto Ingress para el controlador Ingress del equilibrador de carga de aplicación basado en el siguiente archivo alb-ingress.yaml:

---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: "alb-ingress"
  namespace: "ingress-nginx"
  annotations:
    alb.ingress.kubernetes.io/scheme: internet-facing
    alb.ingress.kubernetes.io/certificate-arn: arn:aws:acm:your-region:your-account-id:certificate/XXXX-XXXX-XXXX-XXXX-XXXXX
    alb.ingress.kubernetes.io/healthcheck-path: /dashboard/
    alb.ingress.kubernetes.io/listen-ports: '[{"HTTP": 80}, {"HTTPS":443}]'
    alb.ingress.kubernetes.io/actions.ssl-redirect: '{"Type": "redirect", "RedirectConfig": { "Protocol": "HTTPS", "Port": "443", "StatusCode": "HTTP_301"}}'
  labels:
    app: dashboard
spec:
  ingressClassName: alb
  rules:
  - http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: ssl-redirect
            port:
              name: use-annotation
      - path: /
        pathType: Prefix
        backend:
          service:
            name: "nginx-ingress-nginx-controller"
            port:
              number: 80

Nota: Sustituya alb.ingress.kubernetes.io/certificate-arn por el nombre de recurso de Amazon (ARN) de su certificado de ACM. Para Fargate, añada «alb.ingress.kubernetes.io/target-type: ip» en las anotaciones

El archivo de manifiesto anterior usa las siguientes anotaciones:

La anotación «alb.ingress.kubernetes.io/scheme» crea un equilibrador de carga de aplicación orientado a Internet. La anotación «alb.ingress.kubernetes.io/certificate-arn» asocia el ARN de su certificado de ACM al agente de escucha 443 del equilibrador de carga de aplicación. La anotación «alb.ingress.kubernetes.io/listen-ports» crea los agentes de escucha de los puertos 80 y 443. La anotación «alb.ingress.kubernetes.io/actions.ssl-redirect» redirige todas las solicitudes que llegan a los puertos 80 a 443. La anotación «alb.ingress.kubernetes.io/healthcheck-path» establece la ruta de comprobación de estado en /dashboard/.

3.    Aplique el archivo de manifiesto del paso 2 anterior:

kubectl apply -f alb-ingress.yaml

Desplegar el panel de control de Kubernetes

Para desplegar el panel de control de Kubernetes, consulteel tutorial: Administración de clústeres.

Crear un objeto Ingress para el controlador NGINX Ingress

1.    Cree un objeto Ingress para el controlador NGINX Ingress basado en el siguiente archivo ingress-dashboard.yaml:

---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: dashboard
  namespace: kubernetes-dashboard
  annotations:
    nginx.ingress.kubernetes.io/backend-protocol: "HTTPS"
    nginx.ingress.kubernetes.io/rewrite-target: /$2
    nginx.ingress.kubernetes.io/configuration-snippet: |
      rewrite ^(/dashboard)$ $1/ redirect;
spec:
  ingressClassName: nginx
  rules:
  - http:
      paths:
      - path: /dashboard(/|$)(.*)
        pathType: Prefix
        backend:
          service:
            name: kubernetes-dashboard
            port:
              number: 443

Nota: La anotación «nginx.ingress.kubernetes.io/rewrite-target» reescribe la URL antes de reenviar la solicitud a los pods del backend. En /dashboard(/|$)(.*) para path,(.*) almacena la URL dinámica que se genera al acceder al panel de control de Kubernetes. La anotación «nginx.ingress.kubernetes.io/rewrite-target» reemplaza los datos capturados en la URL antes de reenviar la solicitud al servicio kubernetes-dashboard. La anotación «nginx.ingress.kubernetes.io/configuration-snippet» reescribe la URL para añadir una barra al final («/») solo si se accede a ALB-URL/dashboard.

2.    Aplique el archivo de manifiesto ingress-dashboard.yaml:

kubectl apply -f ingress-dashboard.yaml

3.    Compruebe la URL del equilibrador de carga de aplicación en la DIRECCIÓN del alb-ingress que creó anteriormente:

kubectl get ingress alb-ingress -n ingress-nginx

Ahora puede acceder al panel de control de Kubernetes mediante ALB-URL/dashboard/. Si accede a ALB-URL/dashboard/, se añadirá automáticamente una barra al final («/») a la URL.

Limpiar los recursos que se crearon anteriormente

1.    Elimine la entrada del controlador NGINX Ingress:

helm uninstall nginx -n ingress-nginx

2.    Elimine los componentes del panel de control de Kubernetes y el servidor de métricas:

kubectl delete -f eks-admin-service-account.yaml
kubectl delete -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.0.0-beta8/aio/deploy/recommended.yaml
kubectl delete -f https://github.com/kubernetes-sigs/metrics-server/releases/download/v0.3.6/components.yaml>

3.    Elimine el alb-ingress:

kubectl delete -f alb-ingress.yaml

Nota: Si creó recursos de AWS Identity and Access Management (IAM), puede eliminar el rol de IAM y la política de IAM.

4.    Elimine el AWS Load Balancer Controller:

helm uninstall aws-load-balancer-controller -n kube-system

5.    Elimine el espacio de nombres ingress-ngix:

kubectl delete ns ingress-nginx

6.    Para eliminar el certificado ACM que ha creado, ejecute el siguiente comando:

aws acm delete-certificate \
    --certificate-arn arn:aws:acm:us-east-1:your-account-id:certificate/XXXX-XXXX-XXXX-XXXX-XXXXX \
    --region us-east-1

Nota: Sustituya certificate-arn por el ARN de su certificado. Sustituya us-east-1 por su región de AWS. Sustituya your-account-id por el ID de su cuenta.


OFICIAL DE AWS
OFICIAL DE AWSActualizada hace un año