Instalar Contour para el control de entrada

En este tema se explica cómo implementar Contour en un clúster de carga de trabajo en Tanzu Kubernetes Grid.

Contour es un controlador de entrada de Kubernetes que utiliza el proxy de servicio y de Edge Envoy. Tanzu Kubernetes Grid incluye archivos binarios firmados para Contour y Envoy, que se pueden implementar en clústeres de carga de trabajo para proporcionar servicios de control de entrada en esos clústeres.

Contour y Envoy se implementan directamente en clústeres de carga de trabajo. La implementación de Contour es un requisito previo si desea implementar paquetes Harbor, Grafana y Prometheus.

Para obtener información general sobre el control de entrada, consulte Controladores de entrada en la documentación de Kubernetes.

Requisitos previos

Importante

En esta versión de Tanzu Kubernetes Grid, la implementación proporcionada de Contour y Envoy supone que se utilizan certificados autofirmados.

Preparar el clúster de carga de trabajo para la implementación de Contour

Para preparar el clúster:

  1. Obtenga las credenciales admin del clúster de carga de trabajo en el que desea implementar Contour. Por ejemplo:

    tanzu cluster kubeconfig get my-cluster --admin
    

    En el ejemplo anterior, my-cluster es el nombre del clúster.

  2. Establezca el contexto de kubectl en el clúster. Por ejemplo:

    kubectl config use-context my-cluster-admin@my-cluster
    
  3. Si el clúster no tiene un repositorio de paquetes con el paquete de Contour instalado, como el repositorio tanzu-standard, instale uno:

    tanzu package repository add PACKAGE-REPO-NAME --url PACKAGE-REPO-ENDPOINT --namespace tkg-system
    

    Donde:

    • PACKAGE-REPO-NAME es el nombre del repositorio de paquetes, como tanzu-standard o el nombre de un registro de imagen privado configurado con variables ADDITIONAL_IMAGE_REGISTRY.
    • PACKAGE-REPO-ENDPOINTes la URL del repositorio de paquetes.

      • En esta versión, la URL tanzu-standard es projects.registry.vmware.com/tkg/packages/standard/repo:v2023.10.16. Consulte Repositorios de paquetes de lista para obtener este valor de la CLI de Tanzu, o bien en Tanzu Mission Control, consulte la lista Complementos (Addons) > Repositorios (Repositories) en el panel Clúster (Cluster).
  4. Si aún no lo ha hecho, instale cert-manageren el clúster. Para obtener instrucciones, consulte Instalar el administrador de certificados para la administración de certificados.

  5. Continúe con Implementar Contour en el clúster de carga de trabajo a continuación.

Implementar Contour en el clúster de carga de trabajo

Después de configurar el clúster, primero debe crear el archivo de configuración que se utiliza al instalar el paquete de Contour y, a continuación, instalar el paquete.

  1. Cree un archivo de configuración para el paquete Contour recuperando la configuración predeterminada del paquete:

    tanzu package available get contour.tanzu.vmware.com/PACKAGE-VERSION --default-values-file-output FILE-PATH
    

    Donde PACKAGE-VERSION es la versión del paquete de Contour que desea instalar y FILE-PATH es la ubicación en la que desea guardar el archivo de configuración, por ejemplo, contour-data-values.yaml.

  2. Configure lo siguiente en el archivo contour-data-values.yaml:

    vSphere
    Este archivo configura el paquete de Contour en vSphere.
    ---
    infrastructure_provider: vsphere
    namespace: tanzu-system-ingress
    contour:
     configFileContents: {}
     useProxyProtocol: false
     replicas: 2
     pspNames: "vmware-system-restricted"
     logLevel: info
    envoy:
     service:
       type: NodePort
       annotations: {}
       externalTrafficPolicy: Cluster
       disableWait: false
     hostPorts:
       enable: true
       http: 80
       https: 443
     hostNetwork: false
     terminationGracePeriodSeconds: 300
     logLevel: info
    certificates:
     duration: 8760h
     renewBefore: 360h
    
    AWS
    Este archivo configura el paquete de Contour en vSphere.
    ---
    infrastructure_provider: aws
    namespace: tanzu-system-ingress
    contour:
     configFileContents: {}
     useProxyProtocol: false
     replicas: 2
     pspNames: "vmware-system-restricted"
     logLevel: info
    envoy:
     service:
       type: LoadBalancer
       annotations: {}
       externalTrafficPolicy: Cluster
       aws:
         LBType: classic
       disableWait: false
     hostPorts:
       enable: true
       http: 80
       https: 443
     hostNetwork: false
     terminationGracePeriodSeconds: 300
     logLevel: info
    certificates:
     duration: 8760h
     renewBefore: 360h
    
    Azure
    Este archivo configura el paquete de Contour en Azure.
    ---
    infrastructure_provider: azure
    namespace: tanzu-system-ingress
    contour:
     configFileContents: {}
     useProxyProtocol: false
     replicas: 2
     pspNames: "vmware-system-restricted"
     logLevel: info
    envoy:
     service:
       type: LoadBalancer
       annotations: {}
       externalTrafficPolicy: Cluster
       disableWait: false
     hostPorts:
       enable: true
       http: 80
       https: 443
     hostNetwork: false
     terminationGracePeriodSeconds: 300
     logLevel: info
    certificates:
     duration: 8760h
     renewBefore: 360h
    
  3. Si va a instalar Contour en un clúster de carga de trabajo creado mediante un supervisor de vSphere with Tanzu, realice una de las siguientes acciones:

    • Sin hostPorts:

      Si hostPorts no son necesarios para el daemonset de Envoy, edite contour-data-values.yaml para establecer envoy.hostPorts.enable en false:

      contour-data-values.yaml
      envoy:
        hostPorts:
          enable: false
      
    • Con hostPorts:

      Si hostPorts son necesarios, cree un ClusterRoleBinding que proporcione acceso a la cuenta de servicio Envoy a la PSP tkg-system-privileged:

      kubectl create clusterrolebinding envoy-tkg-admin-privileged-binding --clusterrole=psp:vmware-system-privileged --serviceaccount=tanzu-system-ingress:envoy
      
  4. Si va a instalar Contour en un clúster vSphere que utiliza NSX ALB como proveedor de servicios de equilibrador de carga, modifique el archivo contour-default-values.yaml para establecer envoy.service.type en LoadBalancer:

    [...]
    envoy:
     service:
       type: LoadBalancer
    
  5. Si va a instalar Contour en un entorno de AWS con acceso a Internet restringido, modifique el archivo contour-data-values.yaml para agregar la siguiente anotación al servicio Envoy:

    infrastructure_provider: aws
    [...]
    envoy:
     service:
       annotations:
         service.beta.kubernetes.io/aws-load-balancer-internal: "true"
    
  6. (Opcional) Modifique el archivo contour-data-values.yaml si es necesario. La sección Configuración opcional documenta los valores que puede personalizar en el archivo contour-data-values.yaml y cómo se pueden utilizar para modificar el comportamiento predeterminado de Contour en el clúster de destino. Por ejemplo, el paquete de Contour implementa dos réplicas de Contour de forma predeterminada, pero el número de réplicas se puede configurar. Establezca este número en el valor contour.replicas en contour-data-values.yaml. En la mayoría de los casos, no es necesario modificar el archivo contour-data-values.yaml.

    También puede recuperar estos valores ejecutando el siguiente comando en el clúster de destino:

    tanzu package available get contour.tanzu.vmware.com/AVAILABLE-VERSION --values-schema
    

    Donde AVAILABLE-VERSION es la versión del paquete Contour. La marca --values-schema recupera la sección valuesSchema del recurso de API Package para el paquete de Contour. Puede establecer el formato de salida, --output, para el esquema de valores en yaml, json o table. Para obtener más información, consulte Paquetes en Instalar y administrar paquetes.

    Por ejemplo:

    tanzu package available get contour.tanzu.vmware.com/1.25.4+vmware.1-tkg.1 --values-schema
    
  7. Si el archivo contour-data-values.yaml contiene comentarios, elimínelos:

    yq -i eval '... comments=""' contour-data-values.yaml
    
  8. Instale el paquete de Contour:

    1. Recupere el nombre del paquete disponible:

      tanzu package available list -A
      
    2. Recupere la versión del paquete disponible:

      tanzu package available list contour.tanzu.vmware.com -A
      
    3. Instale el paquete:

      tanzu package install contour \
      --package contour.tanzu.vmware.com \
      --version AVAILABLE-PACKAGE-VERSION \
      --values-file contour-data-values.yaml \
      --namespace TARGET-NAMESPACE
      

      Donde:

      • TARGET-NAMESPACE es el espacio de nombres en el que se desea instalar el paquete de Contour. Por ejemplo, el espacio de nombres my-packages o tanzu-cli-managed-packages.

        • Si no se especifica la marca --namespace, la CLI de Tanzu utiliza el espacio de nombres default. Los pods de Contour y Envoy y cualquier otro recurso asociado con el componente Contour se crean en el espacio de nombres tanzu-system-ingress; no instale el paquete de Contour en este espacio de nombres.
        • El espacio de nombres especificado ya debe existir, por ejemplo, al haber ejecutado kubectl create namespace my-packages.
      • AVAILABLE-PACKAGE-VERSION es la versión que recuperó anteriormente.

      Por ejemplo:

      tanzu package install contour \
      --package contour.tanzu.vmware.com \
      --version 1.25.4+vmware.1-tkg.1 \
      --values-file contour-data-values.yaml \
      --namespace my-packages
      
  9. Confirme que se haya instalado el paquete contour:

    tanzu package installed list -A
    

    Por ejemplo:

    tanzu package installed list -A
    - Retrieving installed packages...
      NAME            PACKAGE-NAME                     PACKAGE-VERSION                   STATUS               NAMESPACE
      cert-manager    cert-manager.tanzu.vmware.com    1.10.1+vmware.1-tkg.1              Reconcile succeeded  my-packages
      contour         contour.tanzu.vmware.com         1.25.4+vmware.1-tkg.1             Reconcile succeeded  my-packages
      antrea          antrea.tanzu.vmware.com                                            Reconcile succeeded  tkg-system
      [...]
    

    Para ver más detalles sobre el paquete, también puede ejecutar:

    tanzu package installed get contour --namespace PACKAGE-NAMESPACE
    

    Donde PACKAGE-NAMESPACE es el espacio de nombres en el que está instalado el paquete contour.

    Por ejemplo:

    tanzu package installed get contour --namespace my-packages
    \ Retrieving installation details for contour...
    NAME:                    contour
    PACKAGE-NAME:            contour.tanzu.vmware.com
    PACKAGE-VERSION:         1.25.4+vmware.1-tkg.1
    STATUS:                  Reconcile succeeded
    CONDITIONS:              [{ReconcileSucceeded True  }]
    USEFUL-ERROR-MESSAGE:
    
  10. Confirme que la aplicación contour se haya conciliado correctamente en su PACKAGE-NAMESPACE:

    kubectl get apps -A
    

    Por ejemplo:

    NAMESPACE     NAME             DESCRIPTION           SINCE-DEPLOY   AGE
    my-packages   cert-manager     Reconcile succeeded   78s            3h5m
    my-packages   contour          Reconcile succeeded   57s            6m3s
    tkg-system    antrea           Reconcile succeeded   45s            3h18m
    [...]
    

    Si el estado no es Reconcile Succeeded, consulte los detalles del estado completo de la aplicación contour. Ver el estado completo puede ayudarle a solucionar el problema.

    kubectl get app contour --namespace PACKAGE-NAMESPACE -o yaml
    

    Donde PACKAGE-NAMESPACE es el espacio de nombres en el que se instaló el paquete. Si la solución de problemas no le ayuda a solucionar el problema, debe desinstalar el paquete antes de volver a instalarlo:

    tanzu package installed delete contour --namespace PACKAGE-NAMESPACE
    
  11. Confirme que los pods de Contour y Envoy se estén ejecutando en el espacio de nombres tanzu-system-ingress:

    kubectl get pods -A
    

    Por ejemplo:

    kubectl get pods -A
    NAMESPACE              NAME                                                        READY   STATUS    RESTARTS   AGE
    [...]
    tanzu-system-ingress   contour-5dc6fc667c-c4w8k                                    1/1     Running   0          14m
    tanzu-system-ingress   contour-5dc6fc667c-jnqwn                                    1/1     Running   0          14m
    tanzu-system-ingress   envoy-mgfll                                                 2/2     Running   0          14m
    [...]
    
  12. Si implementó Contour en AWS o Azure, confirme que se creó un equilibrador de carga para el servicio Envoy:

    kubectl get svc envoy -n tanzu-system-ingress -o jsonpath='{.status.loadBalancer.ingress[0].hostname}'
    

    En AWS, el equilibrador de carga tiene un nombre similar a aabaaad4dfc8e4a808a70a7cbf7d9249-1201421080.us-west-2.elb.amazonaws.com. En Azure, será una dirección IP similar a 20.54.226.44.

Acceder a la interfaz de administración de Envoy de forma remota

Después de implementar Contour en un clúster, puede utilizar la interfaz de administración de Envoy integrada para recuperar los datos sobre las implementaciones.

Para obtener información sobre la interfaz de administración de Envoy, consulte Interfaz de administración en la documentación de Envoy.

  1. Obtenga el nombre del pod Envoy:

    ENVOY_POD=$(kubectl -n tanzu-system-ingress get pod -l app=envoy -o name | head -1)
    
  2. Reenvíe el pod Envoy al puerto 9001 en la máquina de arranque:

    kubectl -n tanzu-system-ingress port-forward $ENVOY_POD 9001
    
  3. Desde la máquina de arranque, recupere información de la implementación de Contour enviando consultas curl a los endpoints de administración de Envoy enumerados en Acceder a la interfaz de administración de Envoy. Por ejemplo, utilice el endpoint de /config_dump para recuperar la configuración cargada actualmente:

    curl http://localhost:9001/config_dump
    

Visualizar el gráfico acíclico dirigido (DAG) de Contour interno

Cuando haya comenzado a ejecutar cargas de trabajo en el clúster, puede visualizar la información de tráfico que Contour expone en forma de un gráfico acíclico (DAG) dirigido.

  1. Instale Graphviz si aún no está instalado. Este paquete proporciona el comando dot que crea el archivo de imagen de DAG.

  2. Obtenga el nombre de un pod de Contour:

    CONTOUR_POD=$(kubectl -n tanzu-system-ingress get pod -l app=contour -o name | head -1)
    
  3. Reenvíe el puerto 6060 en el pod de Contour:

    kubectl -n tanzu-system-ingress port-forward $CONTOUR_POD 6060
    
  4. Abra una nueva ventana de terminal, y descargue y guarde el DAG como un archivo *.png. El siguiente comando requiere que instale dot en el sistema si aún no está presente.

    curl localhost:6060/debug/dag | dot -T png > contour-dag.png
    
  5. Abra contour-dag.png para ver el gráfico.

    Archivo DAG de Contour

Configuración opcional

Para personalizar aún más la configuración, edite los valores predeterminados en el archivo de configuración del paquete de Contour.

La siguiente tabla contiene información sobre los valores que puede personalizar en el archivo contour-data-values.yaml y cómo se pueden utilizar para modificar el comportamiento predeterminado de Contour cuando se implementa en un clúster de carga de trabajo.

Si vuelve a configurar los ajustes de Contour después de la implementación inicial, debe seguir los pasos descritos en Actualizar una implementación de Contour en ejecución para aplicar la nueva configuración al clúster.

Configurar Predeterminado Descripción
infrastructure_provider vsphere La plataforma de destino subyacente. Los valores válidos son vsphere, aws y azure.
kubernetes_distribution none La distribución de Kubernetes, que se utiliza para determinar si se deben aplicar configuraciones específicas de distribución. Las opciones están vacías y openshift. Si se ejecuta en un clúster de OpenShift, debe establecerse en OpenShift. Cuando se establece en OpenShift, se crean una función y un objeto RoleBinding para asociar los controladores de Contour con el recurso de restricción de contexto de seguridad de OpenShift adecuado.
kubernetes_version none La versión de Kubernetes que se utiliza para habilitar comportamientos específicos de la versión. Acepte cualquier versión principal.secundaria.patch válida de Kubernetes. Este campo es opcional. Actualmente, solo tiene efecto cuando kubernetes_distribution está establecido en OpenShift.
namespace tanzu-system-ingress El espacio de nombres donde se ejecutan los pods de Contour y Envoy, distinto del lugar en el que se implementan los paquetes.
registry_secret_names ["contour-reg-creds"] Los nombres de los secretos de marcador de posición que contendrán credenciales de registro para extraer las imágenes de Contour y Envoy.
contour.configFileContents none El contenido de YAML del archivo de configuración de Contour. Para obtener más información, consulte Archivo de configuración en la documentación de Contour.
contour.replicas 2 ¿Cuántas réplicas de pod de Contour se deben tener?
contour.useProxyProtocol false Establece si se habilita el protocolo PROXY para todos los agentes de escucha de Envoy.
contour.logLevel info El nivel de registro de Contour. Los valores válidos son info y debug.
contour.pspNames vmware-system-restricted Una lista separada por comas de directivas de seguridad de pods (Pod Security Policies, PSP) que se aplicarán a los pods de Contour.
contour.resources.contour.limits.cpu none Límite de CPU que se aplicará al contenedor de Contour en la implementación de Contour.
contour.resources.contour.limits.memory none Límite de memoria que se aplicará al contenedor de Contour en la implementación de Contour.
contour.resources.contour.requests.cpu none Solicitud de CPU que se aplicará al contenedor de Contour en la implementación de Contour.
contour.resources.contour.requests.memory none Solicitud de memoria que se aplicará al contenedor de Contour en la implementación de contour.
envoy.workload.type DaemonSet El tipo de Envoy de carga de trabajo de Kubernetes se implementa como. Las opciones son Deployment o DaemonSet.
envoy.workload.replicas 2 El número de réplicas de Envoy que se implementarán cuando envoy.workload.type se establece en Deployment.
envoy.workload.resources.envoy.limits.cpu none Límite de CPU que se aplicará al contenedor de Envoy en la carga de trabajo de Envoy.
envoy.workload.resources.envoy.limits.memory none Límite de memoria que se aplicará al contenedor de Envoy en la carga de trabajo de Envoy.
envoy.workload.resources.envoy.requests.cpu none Solicitud de CPU que se aplicará al contenedor de Envoy en la carga de trabajo de Envoy.
envoy.workload.resources.envoy.requests.memory none Solicitud de memoria que se aplicará al contenedor de Envoy en la carga de trabajo de Envoy.
envoy.workload.resources.shutdownManager.limits.cpu none Límite de CPU que se aplicará al contenedor shutdown-manager en la carga de trabajo de Envoy.
envoy.workload.resources.shutdownManager.limits.memory none Límite de memoria que se aplicará al contenedor shutdown-manager en la carga de trabajo de Envoy.
envoy.workload.resources.shutdownManager.requests.cpu none Solicitud de CPU que se aplicará al contenedor shutdown-manager en la carga de trabajo de Envoy.
envoy.workload.resources.shutdownManager.limits.memory none Solicitud de memoria que se aplicará al contenedor shutdown-manager en la carga de trabajo de Envoy.
envoy.service.type none El tipo de servicio de Kubernetes que se aprovisionará para Envoy. Los valores válidos son LoadBalancer, NodePort y ClusterIP. Si no se especifica, se utilizará un servicio NodePort para vsphere y un LoadBalancer para todas las demás plataformas de destino.
envoy.service.loadBalancerIP none La dirección IP del equilibrador de carga deseada para el servicio Envoy. Esta opción se ignora si envoy.service.type no está establecido en LoadBalancer
envoy.service.externalTrafficPolicy Local La directiva de tráfico externo para el servicio Envoy. Los valores válidos son Local y Cluster.
envoy.service.annotations none Anotaciones que se establecerán en el servicio Envoy.
envoy.service.nodePorts.http none Si envoy.service.type == NodePort, el número de puerto del nodo en el que se debe exponer el agente de escucha HTTP de Envoy. Si no se especifica, Kubernetes asignará automáticamente un puerto de nodo.
envoy.service.nodePorts.https none Si envoy.service.type == NodePort, el número de puerto del nodo en el que se expone el agente de escucha HTTPS de Envoy. Si no se especifica, Kubernetes asignará automáticamente un puerto de nodo.
envoy.service.aws.LBType classic Si infrastructure_provider == aws, el tipo de equilibrador de carga de AWS que se utilizará. Los valores válidos son classic y nlb. Si no utiliza aws, este valor se ignora.
envoy.hostPorts.enable false Establece si se habilitan puertos de host para los pods Envoy. Si false, se ignoran envoy.hostPorts.http y envoy.hostPorts.https.
envoy.hostPorts.http 80 Si envoy.hostPorts.enable == true, el número de puerto del host en el que se mostrará el agente de escucha HTTP de Envoy.
envoy.hostPorts.https 443 Si envoy.hostPorts.enable == true, el número de puerto del host en el que se expone el agente de escucha HTTPS de Envoy.
envoy.hostNetwork false Establece si se habilitan las redes de host para los pods Envoy.
envoy.terminationGracePeriodSeconds 300 El período de gracia de finalización, en segundos, para los pods Envoy.
envoy.logLevel info El nivel de registro de Envoy. Los valores válidos son trace, debug, info, warn, error, critical y off.
envoy.pspNames none Una lista separada por comas de directivas de seguridad de pods (Pod Security Policies, PSP) que se aplicarán a los pods Envoy.
certificates.duration 8760h Tiempo en el que deben ser válidos los certificados para proteger la comunicación entre Contour y Envoy.
certificates.renewBefore 360h Con cuánto tiempo antes del vencimiento deben renovarse los certificados para asegurar la comunicación entre Contour y Envoy.

Actualizar una implementación de Contour en ejecución

Si necesita realizar cambios en la configuración del paquete de Contour después de la implementación, siga los pasos que se indican a continuación para actualizar el paquete de Contour implementado:

  1. Actualice la configuración de Contour en el archivo contour-data-values.yaml. Por ejemplo, puede cambiar el número de réplicas de Contour estableciendo contour.replicas en un nuevo valor.

  2. Actualice el paquete instalado:

    tanzu package installed update contour \
    --version INSTALLED-PACKAGE-VERSION \
    --values-file contour-data-values.yaml \
    --namespace INSTALLED-PACKAGE-NAMESPACE
    

    Donde:

    • INSTALLED-PACKAGE-VERSION es la versión del paquete de Contour instalado.
    • INSTALLED-PACKAGE-NAMESPACE es el espacio de nombres en el que está instalado el paquete de Contour.

    Por ejemplo:

    tanzu package installed update contour \
    --version 1.25.4+vmware.1-tkg.1 \
    --values-file contour-data-values.yaml \
    --namespace my-packages
    

    El paquete de Contour se conciliará con el nuevo valor o los valores que agregó. kapp-controller puede tardar hasta cinco minutos en aplicar los cambios.

    Para obtener más información sobre el comando tanzu package installed update, consulte Actualizar un paquete en Instalar y administrar paquetes. Puede usar este comando para actualizar la versión o la configuración de un paquete instalado.

check-circle-line exclamation-circle-line close-line
Scroll to top icon