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.
kubectl
, como se describe en Instalar la CLI de Tanzu y la CLI de Kubernetes para su uso con un supervisor de vSphere with Tanzu o Instalar la CLI de Tanzu y la CLI de Kubernetes para su uso con clústeres de administración independientes.ImportanteEn esta versión de Tanzu Kubernetes Grid, la implementación proporcionada de Contour y Envoy supone que se utilizan certificados autofirmados.
Para preparar el clúster:
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.
Establezca el contexto de kubectl
en el clúster. Por ejemplo:
kubectl config use-context my-cluster-admin@my-cluster
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-ENDPOINT
es la URL del repositorio de paquetes.
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).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.
Continúe con Implementar Contour en el clúster de carga de trabajo a continuación.
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.
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
.
Configure lo siguiente en el archivo contour-data-values.yaml
:
---
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
---
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
---
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
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
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
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"
(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
Si el archivo contour-data-values.yaml
contiene comentarios, elimínelos:
yq -i eval '... comments=""' contour-data-values.yaml
Instale el paquete de Contour:
Recupere el nombre del paquete disponible:
tanzu package available list -A
Recupere la versión del paquete disponible:
tanzu package available list contour.tanzu.vmware.com -A
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
.
--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.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
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:
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
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
[...]
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
.
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.
Obtenga el nombre del pod Envoy:
ENVOY_POD=$(kubectl -n tanzu-system-ingress get pod -l app=envoy -o name | head -1)
Reenvíe el pod Envoy al puerto 9001 en la máquina de arranque:
kubectl -n tanzu-system-ingress port-forward $ENVOY_POD 9001
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
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.
Instale Graphviz si aún no está instalado. Este paquete proporciona el comando dot
que crea el archivo de imagen de DAG.
Obtenga el nombre de un pod de Contour:
CONTOUR_POD=$(kubectl -n tanzu-system-ingress get pod -l app=contour -o name | head -1)
Reenvíe el puerto 6060 en el pod de Contour:
kubectl -n tanzu-system-ingress port-forward $CONTOUR_POD 6060
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
Abra contour-dag.png
para ver el gráfico.
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. |
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:
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.
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.