En este tema se describe cómo implementar la extensión TKG v1.3.1 para la entrada de Contour. Contour es un controlador de entrada de Kubernetes que utiliza el proxy inverso Envoy. Implemente la extensión TKG para la entrada de Contour a la hora de exponer las rutas de entrada a los servicios que se ejecutan en los clústeres de Tanzu Kubernetes.
Requisitos previos de la extensión
- Aprovisionar un clúster. Consulte Flujo de trabajo para aprovisionar clústeres de Tanzu Kubernetes mediante la API v1alpha2 de TKGS.
- Conéctese al clúster. Consulte Conectarse a un clúster de Tanzu Kubernetes como usuario de vCenter Single Sign-On.
- Descargar el paquete de extensiones TKG v1.3.1 Al host cliente en el que se ejecuta kubectl.
- Instalar los requisitos previos de las extensiones TKG en el clúster de destino.
Implementar la extensión Contour
Contenedor | Tipo de recurso | Réplicas | Descripción |
---|---|---|---|
Envoy | DaemonSet | 3 | Proxy inverso de alto rendimiento |
Contour | Implementación | 2 | Servidor de administración y configuración para Envoy |
- Asegúrese de haber completado cada uno de los requisitos previos de la extensión. Consulte Requisitos previos de la extensión.
- Cambie el directorio en el que descargó los archivos de la extensión Contour.
cd /tkg-extensions-v1.3.1+vmware.1/extensions/ingress/contour
- Ejecute el siguiente comando para crear el espacio de nombres
tanzu-system-ingress
, así como los objetos de función y la cuenta de servicio de Contour.kubectl apply -f namespace-role.yaml
- Cree un archivo de valores de datos de Contour para vSphere.
cp vsphere/contour-data-values-lb.yaml.example vsphere/contour-data-values.yaml
- Para configurar Contour, actualice el archivo
vsphere/contour-data-values.yaml
.El archivo de valores de datos de ejemplo proporciona la configuración mínima requerida. Consulte Configurar la extensión Contour para ver una descripción de todos los campos y las opciones de configuración.
Por ejemplo, la siguiente configuración de Contour para vSphere utiliza un servicio de tipo LoadBalancer.infrastructure_provider: "vsphere" contour: image: repository: projects.registry.vmware.com/tkg envoy: image: repository: projects.registry.vmware.com/tkg tag: v1.17.3_vmware.1 service: type: "LoadBalancer"
Nota: Se recomienda especificar la versión de imagen de Envoyv1.17.3_vmware.1
para no utilizar la versión de imagen de Envoyv1.16.2_vmware.1
, la cual tiene un CVE. Para obtener más información, consulte las Notas de la versión. - Cree un secreto con los valores de datos.
kubectl create secret generic contour-data-values --from-file=values.yaml=vsphere/contour-data-values.yaml -n tanzu-system-ingress
secret/contour-data-values
se crea en el espacio de nombrestanzu-system-ingress
. Verifique con el siguiente comando:kubectl get secrets -n tanzu-system-ingress
- Implemente la aplicación del controlador de entrada de Contour.
kubectl apply -f contour-extension.yaml
Si todo es correcto, debería ver
app.kappctrl.k14s.io/contour created
. - Compruebe el estado de la aplicación del controlador de ingreso de Contour.
kubectl get app contour -n tanzu-system-ingress
Si es correcto, el estado cambia deReconciling
aReconcile succeeded
. Si el estado esReconcile failed
, consulte Solucionar problemas de implementación de entrada de Contour. - Vea más detalles sobre la aplicación del controlador de entrada de Contour.
kubectl get app contour -n tanzu-system-ingress -o yaml
- Vea el servicio Envoy de tipo LoadBalancer.
kubectl get service envoy -n tanzu-system-ingress -o wide
Si es correcto, debería ver los detalles de Envoy LoadBalancer.NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE SELECTOR envoy LoadBalancer 10.79.65.110 10.178.147.73 80:30437/TCP,443:30589/TCP 2m42s app=envoy,kapp.k14s.io/app=1629916985840017976
- Compruebe el DaemonSet de Envoy.
kubectl get daemonsets -n tanzu-system-ingress
Si es correcto, debería ver el DaemonSet de Envoy de 3 pods.NAME DESIRED CURRENT READY UP-TO-DATE AVAILABLE NODE SELECTOR AGE envoy 3 3 3 3 3 <none> 6m10s
- Compruebe la implementación de Contour.
kubectl get deployments -n tanzu-system-ingress
Si es correcto, debería ver la implementación de Contour de 2 pods.NAME READY UP-TO-DATE AVAILABLE AGE contour 2/2 2 2 8m7s
- Compruebe que el controlador de entrada de Contour esté instalado correctamente y listo para poder usarlo.
kubectl get pod,svc -n tanzu-system-ingress
El estado de los pods de Contour y Envoy debe serRunning
, y LoadBalancer para el servicio Envoy se asigna con unaEXTERNAL-IP
.NAME READY STATUS RESTARTS AGE pod/contour-84bb5475cf-7h4cx 1/1 Running 0 9m52s pod/contour-84bb5475cf-v8k9r 1/1 Running 0 9m52s pod/envoy-4828j 2/2 Running 0 9m52s pod/envoy-c54dw 2/2 Running 0 9m52s pod/envoy-qpjqp 2/2 Running 0 9m52s NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE service/contour ClusterIP 10.105.6.207 <none> 8001/TCP 9m52s service/envoy LoadBalancer 10.79.65.110 10.178.147.73 80:30437/TCP,443:30589/TCP 9m52s
Solucionar problemas de implementación de entrada de Contour
Si se produce un error en la implementación o la reconciliación, ejecute kubectl get pods -n tanzu-system-ingress
para ver el estado del pod. El de los pods contour
y envoy
debe ser Running
. Si el estado de un pod es ImagePullBackOff
o ImageCrashLoopBackOff
, no se podrá extraer la imagen del contenedor. Compruebe la URL del registro en los valores de datos y los archivos YAML de extensión, y asegúrese de que sean precisos.
name-XXXX
es el nombre único del pod cuando ejecuta
kubectl get pods -A
:
kubectl logs pod/envoy-XXXXX -c envoy -n tanzu-system-ingress
kubectl logs pod/contour-XXXXX -c contour -n tanzu-system-ingress
Si ve que un pod de Contour está bloqueado en un estado ContainerCreating
sin generar ninguno de los errores de imagen anteriores y no muestra ningún progreso ("contour-xxxxx ha agotado el tiempo de espera para seguir progresando"), es probable que haya un conflicto con la dirección IP. Asegúrese de que el rango de CIDR de los nodos que especificó al configurar la red de carga de trabajo no entre en conflicto con el rango de CIDR de los pods en la especificación del clúster, el cual es de forma predeterminada 192.168.0.0/16
. Si hay un conflicto, actualice el clúster con una subred de pods diferente o cambie la red de nodos.
Actualizar la extensión Contour
Actualice la extensión de Contour que está implementada en el clúster de Tanzu Kubernetes.
- Obtenga los valores de datos de Contour del secreto.
kubectl get secret contour-data-values -n tanzu-system-ingress -o 'go-template={{ index .data "values.yaml" }}' | base64 -d > contour-data-values.yaml
- Actualice los valores de datos de entrada de Contour en
ingress/contour/values.yaml
. Consulte Configurar la extensión Contour.Por ejemplo, la siguiente configuración de Contour para vSphere utiliza un servicio de tipo LoadBalancer.infrastructure_provider: "vsphere" contour: image: repository: projects.registry.vmware.com/tkg envoy: image: repository: projects.registry.vmware.com/tkg tag: v1.17.3_vmware.1 service: type: "LoadBalancer"
Nota: Se recomienda especificar la versión de imagen de Envoyv1.17.3_vmware.1
para no utilizar la versión de imagen de Envoyv1.16.2_vmware.1
, la cual tiene un CVE. Para obtener más información, consulte las Notas de la versión. - Actualice el secreto de los valores de datos de Contour.
kubectl create secret generic contour-data-values --from-file=values.yaml=contour-data-values.yaml -n tanzu-system-ingress -o yaml --dry-run | kubectl replace -f-
La extensión Contour se conciliará entonces con los nuevos valores de datos.Nota: De forma predeterminada, kapp-controller sincronizará las aplicaciones cada 5 minutos. La actualización debería tener efecto en 5 minutos o menos. Si desea que se aplique inmediatamente, cambie los valores desyncPeriod
encontour-extension.yaml
a un valor menor y vuelva a implementar la extensión mediantekubectl apply -f contour-extension.yaml
. - Compruebe el estado de la aplicación.
kubectl get app contour -n tanzu-system-ingress
El estado debe cambiar a
Reconcile Succeeded
una vez que Contour se actualice. - Ver estado detallado.
kubectl get app contour -n tanzu-system-ingress -o yaml
- Solucione los problemas en caso necesario. Consulte Solucionar problemas de implementación de entrada de Contour.
Eliminar la extensión de extensión Contour
Elimine la extensión Contour de un clúster de Tanzu Kubernetes.
- Cambie el directorio a la extensión Contour.
cd extensions/ingress/contour/
- Elimine la aplicación del controlador de entrada de Contour.
kubectl delete app contour -n tanzu-system-ingress
Resultado esperado:
app.kappctrl.k14s.io "contour" deleted
. - Compruebe que la aplicación del controlador de entrada de Contour se haya eliminado.
kubectl get app contour -n tanzu-system-ingress
Resultado esperado:
apps.kappctrl.k14s.io "contour" not found
. - Elimine el espacio de nombres
tanzu-system-ingress
, así como los objetos de función y la cuenta de servicio de la extensión Contour.kubectl delete -f namespace-role.yaml
Actualizar la extensión Contour
- Exporte el mapa de configuración de Contour y guárdelo como copia de seguridad.
kubectl get configmap contour -n tanzu-system-ingress -o 'go-template={{ index .data "contour.yaml" }}' > contour-configmap.yaml
- Elimine la implementación de Contour existente. Consulte Eliminar la extensión de extensión Contour.
- Implemente la última extensión Contour. Consulte Implementar la extensión Contour.
Configurar la extensión Contour
/extensions/ingress/contour/vsphere/contour-data-values.yaml
.
Parámetro | Descripción | Tipo | Predeterminado |
---|---|---|---|
infrastructure_provider | Proveedor de infraestructura. Valores admitidos: vsphere, aws, azure | string | Parámetro obligatorio |
contour.namespace | Espacio de nombres en el que se implementará Contour | string | tanzu-system-ingress |
contour.config.requestTimeout | Tiempo de espera de solicitud del cliente que se debe pasar a Envoy | time.Duration | 0s Consulte Tiempo de espera de ruta para las descargas de archivo. |
contour.config.server.xdsServerType | Tipo de servidor XDS que se utilizará: Valores compatibles: contour o envoy | string | Nulo |
contour.config.tls.minimumProtocolVersion | Versión mínima de TLS que Contour negociará | string | 1,1 |
contour.config.tls.fallbackCertificate.name | Nombre del secreto que contiene el certificado de reserva para las solicitudes que no coinciden con el SNI definido para un vhost | string | Nulo |
contour.config.tls.fallbackCertificate.namespace | Espacio de nombres del secreto que contiene el certificado de reserva | string | Nulo |
contour.config.tls.envoyClientCertificate.name | Nombre del secreto que se utilizará como certificado del cliente, clave privada para la conexión TLS al servicio back-end. | string | Nulo |
contour.config.tls.envoyClientCertificate.namespace | Espacio de nombres del secreto que se utilizará como certificado del cliente, clave privada para la conexión TLS al servicio back-end. | string | Nulo |
contour.config.leaderelection.configmapName | Nombre del configmap que se utilizará para contour leaderelection | string | leader-elect |
contour.config.leaderelection.configmapNamespace | Espacio de nombres de contour leaderelection configmap | string | tanzu-system-ingress |
contour.config.disablePermitInsecure | Deshabilita el campo ingressroute permitInsecure | booleano | false |
contour.config.accesslogFormat | Formato de registro de acceso | string | envoy |
contour.config.jsonFields | Campos que se registrarán | array of strings | https://godoc.org/github.com/projectcontour/contour/internal/envoy#JSONFields |
contour.config.useProxyProtocol | https://projectcontour.io/guides/proxy-proto/ | booleano | false |
contour.config.defaultHTTPVersions | Contour debería programar a Envoy para que sirva estas versiones HTTP | array of strings | "HTTP/1.1 HTTP2" |
contour.config.timeouts.requestTimeout | El tiempo de espera de una solicitud completa | time.Duration | Nulo (el tiempo de espera está deshabilitado) |
contour.config.timeouts.connectionIdleTimeout | El tiempo de espera antes de finalizar una conexión inactiva | time.Duration | 60s |
contour.config.timeouts.streamIdleTimeout | Tiempo de espera antes de finalizar una solicitud o un flujo sin actividad | time.Duration | 5m |
contour.config.timeouts.maxConnectionDuration | Tiempo de espera antes de finalizar una conexión, independientemente de si hay actividad o no | time.Duration | Nulo (el tiempo de espera está deshabilitado) |
contour.config.timeouts.ConnectionShutdownGracePeriod | Tiempo que se debe esperar entre el envío de un GOAWAY inicial y final | time.Duration | 5s |
contour.config.cluster.dnsLookupFamily | dns-lookup-family que se utilizará para las solicitudes de subida a servicios de tipo externalName desde una ruta HTTPProxy | string | Nulo (valores admitidos: auto, v4, v6) |
contour.config.debug | Activa la depuración de Contour | booleano | false |
contour.config.ingressStatusAddress | Dirección que se establecerá en el estado de cada recurso de entrada. | string | Nulo |
contour.certificate.duration | Duración del certificado de Contour | time.Duration | 8760h |
contour.certificate.renewBefore | Duración antes de la renovación del certificado de Contour | time.Duration | 360h |
contour.deployment.replicas | Número de réplicas de Contour | entero | 2 |
contour.image.repository | Ubicación del repositorio con la imagen de Contour. El valor predeterminado es el registro de VMware público. Cambie este valor si utiliza un repositorio privado (p. ej., un entorno aislado). | string | projects.registry.vmware.com/tkg |
contour.image.name | Nombre de la imagen de Contour | string | contour |
contour.image.tag | Etiqueta de la imagen de Contour. Es posible que este valor tenga que actualizarse si va a actualizar la versión de Contour. | string | v1.11.0_vmware.1 |
contour.image.pullPolicy | Directiva de extracción de imagen de Contour | string | IfNotPresent |
envoy.image.repository | Ubicación del repositorio con la imagen de Envoy. El valor predeterminado es el registro de VMware público. Cambie este valor si utiliza un repositorio privado (p. ej., un entorno aislado). | string | projects.registry.vmware.com/tkg |
envoy.image.name | Nombre de la imagen de Envoy | string | envoy |
envoy.image.tag | Etiqueta de la imagen de Envoy. Es posible que este valor tenga que actualizarse si va a actualizar la versión de Envoy. | string |
Nota: No utilice la imagen de Envoy
v1.16.2_vmware.1 debido a una CVE. Para obtener más información, consulte las
Notas de la versión.
|
envoy.image.pullPolicy | Directiva de extracción de la imagen de Envoy | string | IfNotPresent |
envoy.hostPort.enable | Etiqueta para exponer los puertos de Envoy en el host | booleano | true |
envoy.hostPort.http | Puerto de host HTTP de Envoy | entero | 80 |
envoy.hostPort.https | Puerto de host HTTPS de Envoy | entero | 443 |
envoy.service.type | Tipo de servicio para exponer Envoy. Valores admitidos: ClusterIP, NodePort y LoadBalancer | string | Parámetro obligatorio para vSphere: NodePort o LoadBalancer, AWS: LoadBalancer, Azure: LoadBalancer |
envoy.service.annotations | Anotaciones en el servicio Envoy | Mapa (valores de clave) | Mapa vacío |
envoy.service.externalTrafficPolicy | Directiva de tráfico externo del servicio Envoy. Valores admitidos: Local, Clúster | string | Clúster |
envoy.service.nodePort.http | NodePort deseado para el servicio de tipo NodePort utilizado para las solicitudes http | entero | Nulo: Kubernetes asigna un puerto de nodo dinámico |
envoy.service.nodePort.https | NodePort deseado para el servicio de tipo NodePort utilizado para las solicitudes HTTPS | entero | Nulo: Kubernetes asigna un puerto de nodo dinámico |
envoy.deployment.hostNetwork | Ejecuta envoy en hostNetwork | booleano | false |
envoy.service.aws.LBType | Tipo AWS LB que se utilizará para exponer el servicio Envoy. Valores admitidos: clásico, nlb | string | clásico |
envoy.loglevel | Nivel de registro que se utilizará para Envoy | string | info |
Tiempo de espera de ruta para las descargas de archivo
El parámetro contour.config.requestTimeout
define la duración del tiempo de espera de la ruta de Contour. El valor predeterminado es 0s
. Si utiliza Contour para la transferencia de archivos, es posible que deba ajustar este valor.
Según la documentación de Contour , un valor de tiempo de espera de 0s
indica a Contour que utilice el tiempo de espera de Envoy. Según la documentación de Envoy, Envoy tiene un tiempo de espera de 15 segundos de forma predeterminada. Además, Envoy espera que toda la operación de solicitud-respuesta se complete dentro del intervalo de tiempo de espera.
Esto significa que con la configuración predeterminada de tiempo de espera de Contour de 0s
, la transferencia de archivos debe completarse en 15 segundos. Para las transferencias de archivos grandes, es posible que este tiempo no sea suficiente. Para deshabilitar el tiempo de espera predeterminado de Envoy, establezca el valor de contour.config.requestTimeout
en 0
.