Cómo configurar Ingress Nginx con Cert-Manager en DigitalOcean Kubernetes

Introducción

Índice
  1. Introducción
  • Prerrequisitos
  • Paso 1: Configuración de servicios backend ficticios
  • Paso 2: Configuración del controlador de ingreso Nginx de Kubernetes
  • Paso 3: creación del recurso de ingreso
  • Paso 4: Instalación y configuración de Cert-Manager
  • Paso 5: Habilitar la comunicación del pod a través del balanceador de carga (opcional)
  • Paso 6: emisión de certificados Let's Encrypt de producción y ensayo
  • Los ingresos de Kubernetes le permiten encaminar de manera flexible el tráfico desde fuera de su clúster de Kubernetes hacia los servicios dentro de su clúster. Esto se logra mediante recursos de ingreso, que definen reglas para encaminar el tráfico HTTP y HTTPS hacia los servicios de Kubernetes, y controladores de ingreso, que implementan las reglas al equilibrar la carga del tráfico y encaminarlo hacia los servicios de backend adecuados.

    Los controladores de ingreso más populares incluyen Nginx, Contour, HAProxy y Traefik. Los ingresos brindan una alternativa más eficiente y flexible a la configuración de servicios Múltiples LoadBalancer, cada uno de los cuales utiliza su propio Load Balancer dedicado.

    En esta guía, configuraremos el controlador de ingreso de Nginx mantenido por Kubernetes y crearemos algunos recursos de ingreso para encaminar el tráfico a varios servicios de backend ficticios. Una vez que hayamos configurado el ingreso, instalaremos cert-manager en nuestro clúster para administrar y aprovisionar certificados TLS para cifrar el tráfico HTTP al ingreso. Esta guía no utiliza el administrador de paquetes Helm. Para obtener una guía sobre cómo implementar el controlador de ingreso de Nginx con Helm, consulte Cómo configurar un ingreso de Nginx en DigitalOcean Kubernetes con Helm.

    Si está buscando un servicio de alojamiento de Kubernetes administrado, consulte nuestro servicio de Kubernetes simple y administrado diseñado para el crecimiento.

    Prerrequisitos

    Antes de comenzar con esta guía, debe tener disponible lo siguiente:

    • Un clúster de Kubernetes 1.15+ con control de acceso basado en roles (RBAC) habilitado. Esta configuración utilizará un clúster de Kubernetes de DigitalOcean, pero puede crear un clúster con otro método.
    • La kubectlherramienta de línea de comandos instalada en su máquina local y configurada para conectarse a su clúster. Puede leer más sobre la instalación kubectlen la documentación oficial. Si está utilizando un clúster Kubernetes de DigitalOcean, consulte Cómo conectarse a un clúster Kubernetes de DigitalOcean para obtener información sobre cómo conectarse a su clúster mediante kubectl.
    • Un nombre de dominio y registros DNS A que puede apuntar al balanceador de carga de DigitalOcean utilizado por Ingress. Si utiliza DigitalOcean para administrar los registros DNS de su dominio, consulte Cómo administrar registros DNS para obtener información sobre cómo crear Aregistros.
    • La wgetutilidad de línea de comandos instalada en su equipo local. Puede instalarla wgetutilizando el administrador de paquetes integrado en su sistema operativo.

    Una vez que tenga estos componentes configurados, estará listo para comenzar con esta guía.

    Paso 1: Configuración de servicios backend ficticios

    Antes de implementar el controlador de Ingress, primero crearemos e implementaremos dos servicios de eco ficticios a los que enrutaremos el tráfico externo mediante Ingress. Los servicios de eco ejecutarán el hashicorp/http-echocontenedor del servidor web, que devuelve una página que contiene una cadena de texto que se pasa cuando se inicia el servidor web. Para obtener más información sobre http-echo, consulte su repositorio de GitHub y, para obtener más información sobre los servicios de Kubernetes, consulte Servicios en los documentos oficiales de Kubernetes.

    En su máquina local, cree y edite un archivo llamado echo1.yamlusando nanosu editor favorito:

    1. nano echo1.yaml

    Pegue el siguiente manifiesto de servicio e implementación:

    echo1.yaml

    apiVersion: v1kind: Servicemetadata:  name: echo1spec:  ports:  - port: 80    targetPort: 5678  selector:    app: echo1---apiVersion: apps/v1kind: Deploymentmetadata:  name: echo1spec:  selector:    matchLabels:      app: echo1  replicas: 2  template:    metadata:      labels:        app: echo1    spec:      containers:      - name: echo1        image: hashicorp/http-echo        args:        - "-text=echo1"        ports:        - containerPort: 5678

    En este archivo, definimos un servicio llamado echo1que enruta el tráfico a los pods con el app: echo1selector de etiquetas. Acepta el tráfico TCP en el puerto 80y lo ingresa al puerto 5678, http-echoel puerto predeterminado de.

    Luego definimos un Deployment, también llamado echo1, que administra Pods con el app: echo1Label Selector. Especificamos que el Deployment debe tener 2 réplicas de Pod y que los Pods deben iniciar un contenedor llamado que echo1ejecuta la hashicorp/http-echoimagen. Pasamos el textparámetro y lo configuramos en echo1, para que el http-echoservidor web devuelva echo1. Finalmente, abrimos el puerto 5678en el contenedor de Pod.

    Una vez que esté satisfecho con su manifiesto de servicio e implementación ficticio, guarde y cierre el archivo.

    Luego, crea los recursos de Kubernetes usando kubectl applyla -fbandera, especificando el archivo que acabas de guardar como parámetro:

    1. kubectl apply -f echo1.yaml

    Deberías ver el siguiente resultado:

    Outputservice/echo1 createddeployment.apps/echo1 created

    Verifique que el Servicio se haya iniciado correctamente confirmando que tiene una ClusterIP, la IP interna en la que está expuesta el Servicio:

    1. kubectl get svc echo1

    Deberías ver el siguiente resultado:

    OutputNAME      TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)   AGEecho1     ClusterIP   10.245.222.129   none        80/TCP    60s

    Esto indica que el echo1servicio ahora está disponible internamente en 10.245.222.129el puerto 80. Reenviará el tráfico a contenedorPort 5678en los pods que seleccione.

    Ahora que el echo1servicio está en funcionamiento, repita este proceso para el echo2servicio.

    Crea y abre un archivo llamado echo2.yaml:

    echo2.yaml

    apiVersion: v1kind: Servicemetadata:  name: echo2spec:  ports:  - port: 80    targetPort: 5678  selector:    app: echo2---apiVersion: apps/v1kind: Deploymentmetadata:  name: echo2spec:  selector:    matchLabels:      app: echo2  replicas: 1  template:    metadata:      labels:        app: echo2    spec:      containers:      - name: echo2        image: hashicorp/http-echo        args:        - "-text=echo2"        ports:        - containerPort: 5678

    Aquí, básicamente, usamos el mismo manifiesto de Service and Deployment que el anterior, pero nombramos y reetiquetamos Service and Deployment echo2. Además, para brindar algo de variedad, creamos solo una réplica de Pod. Nos aseguramos de configurar el textparámetro echo2para que el servidor web devuelva el texto echo2.

    Guarde y cierre el archivo y cree los recursos de Kubernetes usando kubectl:

    1. kubectl apply -f echo2.yaml

    Deberías ver el siguiente resultado:

    Outputservice/echo2 createddeployment.apps/echo2 created

    Una vez más, verifique que el Servicio esté en funcionamiento:

    1. kubectl get svc

    Deberías ver tanto los servicios echo1como echo2los servicios con ClusterIP asignados:

    OutputNAME         TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)   AGEecho1        ClusterIP   10.245.222.129   none        80/TCP    6m6secho2        ClusterIP   10.245.128.224   none        80/TCP    6m3skubernetes   ClusterIP   10.245.0.1       none        443/TCP   4d21h

    Ahora que nuestros servicios web de eco ficticios están en funcionamiento, podemos pasar a implementar el controlador de ingreso Nginx.

    Paso 2: Configuración del controlador de ingreso Nginx de Kubernetes

    En este paso, implementaremos v1.1.1el controlador de ingreso Nginx mantenido por Kubernetes. Tenga en cuenta que existen varios controladores de ingreso Nginx; la comunidad de Kubernetes mantiene el que se usa en esta guía y Nginx Inc. mantiene kubernetes-ingress. Las instrucciones de este tutorial se basan en las de la Guía de instalación oficial del controlador de ingreso Nginx de Kubernetes.

    El controlador de ingreso de Nginx consta de un pod que ejecuta el servidor web de Nginx y vigila el plano de control de Kubernetes en busca de objetos de recursos de ingreso nuevos y actualizados. Un recurso de ingreso es, en esencia, una lista de reglas de enrutamiento de tráfico para los servicios de backend. Por ejemplo, una regla de ingreso puede especificar que el tráfico HTTP que llega a la ruta /web1debe dirigirse hacia el web1servidor web de backend. Con los recursos de ingreso, también puede realizar un enrutamiento basado en host: por ejemplo, enrutar solicitudes que llegan web1.your_domain.comal servicio de Kubernetes de backend web1.

    En este caso, debido a que estamos implementando el controlador de Ingress en un clúster Kubernetes de DigitalOcean, el controlador creará un servicio LoadBalancer que aprovisionará un balanceador de carga de DigitalOcean al que se dirigirá todo el tráfico externo. Este balanceador de carga enrutará el tráfico externo al pod del controlador de Ingress que ejecuta Nginx, que luego reenvía el tráfico a los servicios de backend correspondientes.

    Comenzaremos creando los recursos de Kubernetes del controlador de ingreso de Nginx. Estos consisten en ConfigMaps que contienen la configuración del controlador, los roles de control de acceso basados ​​en roles (RBAC) para otorgarle acceso al controlador a la API de Kubernetes y la implementación real del controlador de ingreso que utiliza v1.1.1la imagen del controlador de ingreso de Nginx. Para ver una lista completa de estos recursos necesarios, consulte el manifiesto del repositorio de GitHub del controlador de ingreso de Nginx de Kubernetes.

    Nota: En este tutorial, seguimos las instrucciones de instalación oficiales del proveedor de DigitalOcean. Debes elegir el archivo de manifiesto adecuado según tu proveedor de Kubernetes.

    Para crear los recursos, utilice kubectl applyy la -fbandera para especificar el archivo de manifiesto alojado en GitHub:

    1. kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.1.1/deploy/static/provider/do/deploy.yaml

    Usamos applyaquí para que en el futuro podamos realizar applycambios incrementales en los objetos del controlador de ingreso en lugar de escribirlos por completo. Para obtener más información sobre apply, consulte Administración de recursos en la documentación oficial de Kubernetes.

    Deberías ver el siguiente resultado:

    Outputnamespace/ingress-nginx createdserviceaccount/ingress-nginx createdconfigmap/ingress-nginx-controller createdclusterrole.rbac.authorization.k8s.io/ingress-nginx createdclusterrolebinding.rbac.authorization.k8s.io/ingress-nginx createdrole.rbac.authorization.k8s.io/ingress-nginx createdrolebinding.rbac.authorization.k8s.io/ingress-nginx createdservice/ingress-nginx-controller-admission createdservice/ingress-nginx-controller createddeployment.apps/ingress-nginx-controller createdvalidatingwebhookconfiguration.admissionregistration.k8s.io/ingress-nginx-admission createdclusterrole.rbac.authorization.k8s.io/ingress-nginx-admission createdclusterrolebinding.rbac.authorization.k8s.io/ingress-nginx-admission createdjob.batch/ingress-nginx-admission-create createdjob.batch/ingress-nginx-admission-patch createdrole.rbac.authorization.k8s.io/ingress-nginx-admission createdrolebinding.rbac.authorization.k8s.io/ingress-nginx-admission createdserviceaccount/ingress-nginx-admission created

    Esta salida también sirve como un resumen conveniente de todos los objetos del controlador de ingreso creados a partir del deploy.yamlmanifiesto.

    Confirme que los pods del controlador de ingreso se hayan iniciado:

    1. kubectl get pods -n ingress-nginx
    2. -l app.kubernetes.io/name=ingress-nginx --watch
    OutputNAME                                       READY   STATUS      RESTARTS   AGEingress-nginx-admission-create-l2jhk       0/1     Completed   0          13mingress-nginx-admission-patch-hsrzf        0/1     Completed   0          13mingress-nginx-controller-c96557986-m47rq   1/1     Running     0          13m

    Pulse CTRL+Cpara volver al mensaje.

    Ahora, confirme que el balanceador de carga de DigitalOcean se creó correctamente obteniendo los detalles del servicio con kubectl:

    1. kubectl get svc --namespace=ingress-nginx

    Después de varios minutos, debería ver una dirección IP externa, correspondiente a la dirección IP del balanceador de carga de DigitalOcean:

    OutputNAME                                 TYPE           CLUSTER-IP       EXTERNAL-IP       PORT(S)                      AGEingress-nginx-controller             LoadBalancer   10.245.201.120   203.0.113.0   80:31818/TCP,443:31146/TCP   14mingress-nginx-controller-admission   ClusterIP      10.245.239.119   none            443/TCP                      14m

    Anote la dirección IP externa del balanceador de carga, ya que la necesitará en un paso posterior.

    Nota: De forma predeterminada, el servicio Nginx Ingress LoadBalancer Service tiene service.spec.externalTrafficPolicyel valor Local, que enruta todo el tráfico del balanceador de carga a los nodos que ejecutan pods Nginx Ingress. Los demás nodos no pasarán deliberadamente las comprobaciones de estado del balanceador de carga para que el tráfico de Ingress no se enrute hacia ellos. Las políticas de tráfico externo están fuera del alcance de este tutorial, pero para obtener más información, puede consultar Un análisis profundo de las políticas de tráfico externo de Kubernetes y la dirección IP de origen para los servicios con Type=LoadBalancer en los documentos oficiales de Kubernetes.

    Este balanceador de carga recibe tráfico en los puertos HTTP y HTTPS 80 y 443, y lo reenvía al módulo del controlador de Ingress. El controlador de Ingress luego enrutará el tráfico al servicio de backend correspondiente.

    Ahora podemos apuntar nuestros registros DNS a este balanceador de carga externo y crear algunos recursos de ingreso para implementar reglas de enrutamiento de tráfico.

    Paso 3: creación del recurso de ingreso

    Comenzamos creando un recurso de ingreso mínimo para encaminar el tráfico dirigido a un subdominio determinado a un servicio de backend correspondiente.

    En esta guía, utilizaremos el dominio de prueba example.com . Debes sustituirlo por el nombre de dominio que posees.

    Primero crearemos una regla simple para encaminar el tráfico dirigido a echo1.ejemplo.comal echo1servicio backend y al tráfico dirigido a echo2.ejemplo.comal echo2servicio backend.

    Comience abriendo un archivo llamado echo_ingress.yamlen su editor favorito:

    1. nano echo_ingress.yaml

    Pegue la siguiente definición de ingreso:

    echo_ingress.yaml

    apiVersion: networking.k8s.io/v1kind: Ingressmetadata:  name: echo-ingressspec:  rules:  - host: echo1.example.com    http:        paths:        - pathType: Prefix          path: "/"          backend:            service:              name: echo1              port:                number: 80  - host: echo2.example.com    http:        paths:        - pathType: Prefix          path: "/"          backend:            service:              name: echo2              port:                number: 80

    Cuando haya terminado de editar sus reglas de Ingress, guarde y cierre el archivo.

    Aquí, hemos especificado que nos gustaría crear un recurso de ingreso llamado echo-ingressy encaminar el tráfico en función del encabezado Host. Un encabezado Host de solicitud HTTP especifica el nombre de dominio del servidor de destino. Para obtener más información sobre los encabezados de solicitud Host, consulte la página de definición de Mozilla Developer Network. Solicitudes con host echo1.ejemplo.comSerá dirigido al echo1backend configurado en el Paso 1 ya las solicitudes con el host echo2.ejemplo.comSerá dirigido al echo2backend.

    Ahora puedes crear el Ingress usando kubectl:

    1. kubectl apply -f echo_ingress.yaml

    Verá el siguiente resultado que confirma la creación de Ingress:

    Outputingress.networking.k8s.io/echo-ingress created

    Para probar el ingreso, navegue hasta su servicio de administración de DNS y cree registros A para la IP externa del balanceador de carga de DigitalOcean echo1.example.comy que apunten a ella. La IP externa del balanceador de carga es la dirección IP externa del servicio, que obtuvimos en el paso anterior. Si está utilizando DigitalOcean para administrar los registros DNS de su dominio, consulte Cómo administrar registros DNS para aprender a crear registros.echo2.example.comingress-nginxA

    Una vez que haya creado los registros DNS necesarios echo1.example.com, echo2.example.compuede probar el controlador de ingreso y el recurso que ha creado utilizando la curlutilidad de línea de comandos.

    Desde su máquina local, curlel echo1Servicio:

    1. curl echo1.example.com

    Debería recibir la siguiente respuesta del echo1servicio:

    Outputecho1

    Esto confirma que su solicitud echo1.example.comse está enrutando correctamente a través del ingreso de Nginx al echo1servicio backend.

    Ahora, realice la misma prueba para el echo2Servicio:

    1. curl echo2.example.com

    Debería recibir la siguiente respuesta del echo2Servicio:

    Outputecho2

    Esto confirma que su solicitud echo2.example.comse está enrutando correctamente a través del ingreso de Nginx al echo2servicio backend.

    En este punto, ha configurado correctamente un Ingress Nginx mínimo para realizar el enrutamiento basado en host virtual. En el siguiente paso, instalaremos cert-manager para proporcionar certificados TLS para nuestro Ingress y habilitar el protocolo HTTPS más seguro.

    Paso 4: Instalación y configuración de Cert-Manager

    En este paso, lo instalaremosversión 1.7.1de cert-manager en nuestro clúster. cert-manager es un complemento de Kubernetes que proporciona certificados TLS de Let's Encrypt y otras autoridades de certificación (CA) y administra sus ciclos de vida. Los certificados se pueden solicitar y configurar automáticamente anotando Recursos de Ingress, agregando una tlssección a la especificación de Ingress y configurando uno o más Emisores o ClusterIssuers para especificar su autoridad de certificación preferida. Para obtener más información sobre los objetos Emisor y ClusterIssuer, consulte la documentación oficial de cert-manager sobre Emisores.

    Instale cert-manager y sus definiciones de recursos personalizados (CRD), como Issuers y ClusterIssuers, siguiendo las instrucciones de instalación oficiales. Tenga en cuenta que se creará un espacio de nombres llamado cert-manageren el que se crearán los objetos de cert-manager:

    1. kubectl apply -f https://github.com/jetstack/cert-manager/releases/download/v1.7.1/cert-manager.yaml

    Deberías ver el siguiente resultado:

    Outputcustomresourcedefinition.apiextensions.k8s.io/certificaterequests.cert-manager.io createdcustomresourcedefinition.apiextensions.k8s.io/certificates.cert-manager.io createdcustomresourcedefinition.apiextensions.k8s.io/challenges.acme.cert-manager.io createdcustomresourcedefinition.apiextensions.k8s.io/clusterissuers.cert-manager.io created. . .deployment.apps/cert-manager-webhook createdmutatingwebhookconfiguration.admissionregistration.k8s.io/cert-manager-webhook createdvalidatingwebhookconfiguration.admissionregistration.k8s.io/cert-manager-webhook created

    Para verificar nuestra instalación, verifique el cert-managerespacio de nombres para los pods en ejecución:

    1. kubectl get pods --namespace cert-manager
    OutputNAME                                       READY   STATUS    RESTARTS   AGEcert-manager-578cd6d964-hr5v2              1/1     Running   0          99scert-manager-cainjector-5ffff9dd7c-f46gf   1/1     Running   0          100scert-manager-webhook-556b9d7dfd-wd5l6      1/1     Running   0          99s

    Esto indica que la instalación del administrador de certificados se realizó correctamente.

    Antes de comenzar a emitir certificados para nuestros dominios echo1.example.comy echo2.example.com, debemos crear un emisor, que especifique la autoridad de certificación de la que se pueden obtener certificados x509 firmados. En esta guía, utilizaremos la autoridad de certificación Let's Encrypt, que proporciona certificados TLS gratuitos y ofrece un servidor de prueba para probar la configuración de su certificado y un servidor de producción para implementar certificados TLS verificables.

    Creemos un ClusterIssuer de prueba para asegurarnos de que el mecanismo de aprovisionamiento de certificados funciona correctamente. Un ClusterIssuer no tiene un ámbito de espacio de nombres y puede ser utilizado por recursos de certificado en cualquier espacio de nombres.

    Abra un archivo llamado staging_issuer.yamlen su editor de texto favorito:

    nano staging_issuer.yaml

    Pegue el siguiente manifiesto ClusterIssuer:

    emisor_de_escenario.yaml

    apiVersion: cert-manager.io/v1kind: ClusterIssuermetadata: name: letsencrypt-staging namespace: cert-managerspec: acme:   # The ACME server URL   server: https://acme-staging-v02.api.letsencrypt.org/directory   # Email address used for ACME registration   email: your_email_address_here   # Name of a secret used to store the ACME account private key   privateKeySecretRef:     name: letsencrypt-staging   # Enable the HTTP-01 challenge provider   solvers:   - http01:       ingress:         class:  nginx

    Aquí especificamos que nos gustaría crear un ClusterIssuer llamado letsencrypt-stagingy usar el servidor de prueba Let's Encrypt. Más adelante, usaremos el servidor de producción para implementar nuestros certificados, pero el servidor de producción limita la velocidad de las solicitudes que se realizan en él, por lo que, para fines de prueba, debe usar la URL de prueba.

    Luego, especificamos una dirección de correo electrónico para registrar el certificado y creamos un secreto de Kubernetes llamado letsencrypt-stagingpara almacenar la clave privada de la cuenta ACME. También utilizamos el HTTP-01mecanismo de desafío. Para obtener más información sobre estos parámetros, consulte la documentación oficial de cert-manager en Emisores.

    Implemente ClusterIssuer utilizando kubectl:

    1. kubectl create -f staging_issuer.yaml

    Deberías ver el siguiente resultado:

    Outputclusterissuer.cert-manager.io/letsencrypt-staging created

    Ahora repetiremos este proceso para crear el ClusterIssuer de producción. Tenga en cuenta que los certificados solo se crearán después de anotar y actualizar el recurso Ingress provisto en el paso anterior.

    Abra un archivo llamado prod_issuer.yamlen su editor favorito:

    nano prod_issuer.yaml

    Pegue el siguiente manifiesto:

    prod_emisor.yaml

    apiVersion: cert-manager.io/v1kind: ClusterIssuermetadata:  name: letsencrypt-prod  namespace: cert-managerspec:  acme:    # The ACME server URL    server: https://acme-v02.api.letsencrypt.org/directory    # Email address used for ACME registration    email: your_email_address_here    # Name of a secret used to store the ACME account private key    privateKeySecretRef:      name: letsencrypt-prod    # Enable the HTTP-01 challenge provider    solvers:    - http01:        ingress:          class: nginx

    Tenga en cuenta la URL del servidor ACME diferente y el letsencrypt-prodnombre de la clave secreta.

    Cuando haya terminado de editar, guarde y cierre el archivo.

    Implementar este emisor mediante kubectl:

    1. kubectl create -f prod_issuer.yaml

    Deberías ver el siguiente resultado:

    Outputclusterissuer.cert-manager.io/letsencrypt-prod created

    Ahora que hemos creado nuestros clústeres de producción y ensayo Let's Encrypt, estamos listos para modificar el recurso de ingreso que creamos anteriormente y habilitar el cifrado TLS para las rutas echo1.example.comy echo2.example.com.

    Si usa DigitalOcean Kubernetes, primero debe implementar una solución alternativa para que los pods puedan comunicarse con otros pods mediante Ingress. Si no usa DigitalOcean Kubernetes, puede pasar directamente al paso 6.

    Paso 5: Habilitar la comunicación del pod a través del balanceador de carga (opcional)

    Antes de proporcionar certificados de Let's Encrypt, cert-manager primero realiza una comprobación automática para garantizar que Let's Encrypt pueda acceder al pod de cert-manager que valida su dominio. Para que esta comprobación se realice en DigitalOcean Kubernetes, debe habilitar la comunicación entre pods a través del balanceador de carga de Nginx Ingress.

    Para ello, crearemos un registro DNS A que puntear a la IP externa del balanceador de carga en la nube y anotaremos el manifiesto del servicio de ingreso de Nginx con este subdominio.

    Comience navegando hasta su servicio de administración de DNS y cree un registro A para workaround.example.comapuntar a la IP externa del balanceador de carga de DigitalOcean. La IP externa del balanceador de carga es la dirección IP externa del ingress-nginxservicio, que obtuvimos en el paso 2. Si está utilizando DigitalOcean para administrar los registros DNS de su dominio, consulte Cómo administrar registros DNS para aprender a crear registros A. Aquí usamos el subdominio, workaroundpero usted es libre de usar el subdominio que prefiera.

    Ahora que ha creado un registro DNS que apunta al balanceador de carga de Ingress, anote el servicio LoadBalancer de Ingress con la do-loadbalancer-hostnameanotación. Abra un archivo con el nombre ingress_nginx_svc.yamlen su editor favorito y pegue el siguiente manifiesto LoadBalancer:

    ingreso_nginx_svc.yaml

    apiVersion: v1kind: Servicemetadata:  annotations:    service.beta.kubernetes.io/do-loadbalancer-enable-proxy-protocol: 'true'    service.beta.kubernetes.io/do-loadbalancer-hostname: "workaround.example.com"  labels:    helm.sh/chart: ingress-nginx-4.0.6    app.kubernetes.io/name: ingress-nginx    app.kubernetes.io/instance: ingress-nginx    app.kubernetes.io/version: 1.1.1    app.kubernetes.io/managed-by: Helm    app.kubernetes.io/component: controller  name: ingress-nginx-controller  namespace: ingress-nginxspec:  type: LoadBalancer  externalTrafficPolicy: Local  ports:    - name: http      port: 80      protocol: TCP      targetPort: http    - name: https      port: 443      protocol: TCP      targetPort: https  selector:    app.kubernetes.io/name: ingress-nginx    app.kubernetes.io/instance: ingress-nginx    app.kubernetes.io/component: controller

    Este manifiesto de servicio se extrajo del archivo de manifiesto completo de Nginx Ingress que instaló en el paso 2. Asegúrese de copiar el manifiesto de servicio correspondiente a la versión de Nginx Ingress que instaló; en este tutorial, es 1.1.1. Asegúrese también de configurar la do-loadbalancer-hostnameanotación en el workaround.example.comdominio.

    Cuando haya terminado, guarde y cierre el archivo.

    Modifique el ingress-nginx-controllerservicio en ejecución usando kubectl apply:

    kubectl apply -f ingress_nginx_svc.yaml

    Deberías ver el siguiente resultado:

    Outputservice/ingress-nginx-controller configured

    Esto confirma que ha anotado el ingress-nginx-controllerservicio y los pods en su clúster ahora pueden comunicarse entre sí mediante este ingress-nginx-controllerbalanceador de carga.

    Paso 6: emisión de certificados Let's Encrypt de producción y ensayo

    Para emitir un certificado TLS provisional para nuestros dominios, anotaremos echo_ingress.yamlcon el ClusterIssuer creado en el Paso 4. Esto se usará ingress-shimpara crear y emitir automáticamente certificados para los dominios especificados en el manifiesto de Ingress.

    Ábrelo echo_ingress.yamlen tu editor favorito:

    1. nano echo_ingress.yaml

    Agregue lo siguiente al manifiesto de recursos de Ingress:

    echo_ingress.yaml

    apiVersion: networking.k8s.io/v1kind: Ingressmetadata:  name: echo-ingress  annotations:    cert-manager.io/cluster-issuer: "letsencrypt-staging"    kubernetes.io/ingress.class: "nginx"spec:  tls:  - hosts:    - echo1.example.com    - echo2.example.com    secretName: echo-tls  rules:    - host: echo1.example.com      http:        paths:          - pathType: Prefix            path: "/"            backend:              service:                name: echo1                port:                  number: 80    - host: echo2.example.com      http:        paths:          - pathType: Prefix            path: "/"            backend:              service:                name: echo2                port:                  number: 80

    Aquí agregamos una anotación para establecer el ClusterIssuer del administrador de certificados en letsencrypt-staging, el certificado de prueba ClusterIssuer creado en el Paso 4. También agregamos una anotación que describe el tipo de ingreso, en este caso nginx.

    También agregamos un tlsbloque para especificar los hosts para los que queremos adquirir certificados y especificamos un secretName. Este secreto contendrá la clave privada TLS y el certificado emitido. Asegúrese de intercambiarlo example.comcon el dominio para el que ha creado registros DNS.

    Cuando haya terminado de realizar cambios, guarde y cierre el archivo.

    Ahora enviaremos esta actualización al objeto Ingress existente usandokubectl a

    SUSCRÍBETE A NUESTRO BOLETÍN 
    No te pierdas de nuestro contenido ni de ninguna de nuestras guías para que puedas avanzar en los juegos que más te gustan.

    Deja una respuesta

    Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

    Subir

    Este sitio web utiliza cookies para mejorar tu experiencia mientras navegas por él. Este sitio web utiliza cookies para mejorar tu experiencia de usuario. Al continuar navegando, aceptas su uso. Mas informacion