O Contour é um controlador de entrada do Kubernetes que usa o proxy reverso do Envoy. Implante a extensão TKG para entrada de contorno para expor rotas de ingresso para serviços em execução em clusters do Tanzu Kubernetes.
Pré-requisitos de extensão
- Provisione um cluster. Consulte o Fluxo de trabalho para clusters de Tanzu Kubernetes provisionamento.
- Conecte-se ao cluster. Consulte o Conectar-se a um Tanzu Kubernetes cluster como um vCenter Single Sign-On usuário.
- Baixe o pacote TKG Extensions v1.3.1 para o host do cliente no qual você executa o kubectl.
- Pré-requisitos de instalação das extensões TKG no cluster de destino.
Implantar a extensão Contour
Container | Tipo de Recurso | Réplicas | Descrição |
---|---|---|---|
Enviado | DaemonSet | 3 | Proxy reverso de alto desempenho |
Contour | Implantação | 2 | Servidor de gerenciamento e configuração para o Envoy |
- Verifique se você concluiu cada um dos pré-requisitos de extensão. Consulte o Pré-requisitos de extensão.
- Altere o diretório para onde você baixou os arquivos de extensão Contour.
cd /tkg-extensions-v1.3.1+vmware.1/extensions/ingress/contour
- Execute o seguinte comando para criar o namespace
tanzu-system-ingress
e a conta de serviço Contour e os objetos de função.kubectl apply -f namespace-role.yaml
- Crie um arquivo de valores de dados Contour para o vSphere.
cp vsphere/contour-data-values-lb.yaml.example vsphere/contour-data-values.yaml
- Configure o Contour atualizando o arquivo
vsphere/contour-data-values.yaml
.O arquivo de valores de dados de exemplo fornece a configuração mínima necessária. Consulte Configurar a extensão Contour para obter uma descrição de todos os campos e opções de configuração.
Por exemplo, a seguinte configuração de Contour para o vSphere usa um serviço do 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"
Observação: É recomendável que você especifique a versão da imagem do Envoyv1.17.3_vmware.1
para não usar a versão da imagem do Envoyv1.16.2_vmware.1
que tem um CVE. Para obter mais informações, consulte as notas da versão . - Crie um segredo com os valores de dados.
kubectl create secret generic contour-data-values --from-file=values.yaml=vsphere/contour-data-values.yaml -n tanzu-system-ingress
Osecret/contour-data-values
é criado no namespacetanzu-system-ingress
. Verifique usando o seguinte comando:kubectl get secrets -n tanzu-system-ingress
- Implante o aplicativo controlador Contour Ingress.
kubectl apply -f contour-extension.yaml
Se for bem-sucedido, você verá
app.kappctrl.k14s.io/contour created
. - Verifique o status do aplicativo do controlador Contour Ingress.
kubectl get app contour -n tanzu-system-ingress
Em caso de sucesso, o status muda deReconciling
paraReconcile succeeded
. Se o status forReconcile failed
, consulte Solução de problemas de implantação de entrada do Contour. - Visualize informações detalhadas sobre o aplicativo controlador Contour Ingress.
kubectl get app contour -n tanzu-system-ingress -o yaml
- Visualize o serviço Envoy do tipo LoadBalancer.
kubectl get service envoy -n tanzu-system-ingress -o wide
Se for bem-sucedido, você deverá ver os detalhes do Balanceador de Carga do Envoy.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
- Verifique o Envoy DaemonSet.
kubectl get daemonsets -n tanzu-system-ingress
Se for bem-sucedido, você deverá ver o DaemonSet do Envoy de 3 pods.NAME DESIRED CURRENT READY UP-TO-DATE AVAILABLE NODE SELECTOR AGE envoy 3 3 3 3 3 <none> 6m10s
- Verifique a implantação do Contour.
kubectl get deployments -n tanzu-system-ingress
Se for bem-sucedido, você verá a Implantação de Contorno de 2 pods.NAME READY UP-TO-DATE AVAILABLE AGE contour 2/2 2 2 8m7s
- Verifique se o controlador Contour Ingress está instalado corretamente e pronto para uso.
kubectl get pod,svc -n tanzu-system-ingress
O status dos pods Contour e Envoy deve serRunning
, e o LoadBalancer para o Serviço Envoy é atribuído com umEXTERNAL-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
Solução de problemas de implantação de entrada do Contour
Se a implantação ou a reconciliação falhar, execute kubectl get pods -n tanzu-system-ingress
para exibir o status do pod. Os pods contour
e envoy
devem ser Running
. Se um status de pod for ImagePullBackOff
ou ImageCrashLoopBackOff
, a imagem do contêiner não poderá ser extraída. Verifique a URL do registro nos valores de dados e nos arquivos YAML de extensão e certifique-se de que eles sejam precisos.
name-XXXX
é o nome do pod exclusivo quando você executa
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
Se você vir que um pod do Contour está preso em um estado ContainerCreating
sem falhar com um dos erros de imagem acima e sem progredir ("contour-xxxxx has timed out progressing"), isso provavelmente significa que há um conflito de endereço IP . Certifique-se de que o intervalo de CIDR de nós que você especificou ao configurar a rede de carga de trabalho não entre em conflito com o intervalo de CIDR de pods na especificação do cluster, que por padrão é 192.168.0.0/16
. Se houver um conflito, atualize o cluster com uma sub-rede de pods diferente ou altere a rede de nós.
Atualizar a extensão Contour
Atualize a extensão Contour que é implantada em um cluster do Tanzu Kubernetes.
- Obtenha valores de dados Contour do segredo.
kubectl get secret contour-data-values -n tanzu-system-ingress -o 'go-template={{ index .data "values.yaml" }}' | base64 -d > contour-data-values.yaml
- Atualize os valores de dados de Entrada de Contorno em
ingress/contour/values.yaml
. Consulte o Configurar a extensão Contour.Por exemplo, a seguinte configuração de Contour para o vSphere usa um serviço do 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"
Observação: É recomendável que você especifique a versão da imagem do Envoyv1.17.3_vmware.1
para não usar a versão da imagem do Envoyv1.16.2_vmware.1
que tem um CVE. Para obter mais informações, consulte as notas da versão . - Atualize o segredo dos valores de dados do 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-
A extensão Contour é reconciliada com os novos valores de dados.Observação: Por padrão, o kapp-controller sincronizará os aplicativos a cada 5 minutos. A atualização deve entrar em vigor em 5 minutos ou menos. Se você quiser que ela entre em vigor imediatamente, alteresyncPeriod
emcontour-extension.yaml
para um valor menor e reimplante a extensão usandokubectl apply -f contour-extension.yaml
. - Verifique o status do aplicativo.
kubectl get app contour -n tanzu-system-ingress
O status deve mudar para
Reconcile Succeeded
assim que o Contour for atualizado. - Visualize o status detalhado.
kubectl get app contour -n tanzu-system-ingress -o yaml
- Solucione problemas, se necessário. Consulte o Solução de problemas de implantação de entrada do Contour.
Excluir a extensão Contour
Exclua a extensão Contour de um cluster Tanzu Kubernetes.
- Altere o diretório para a extensão Contour.
cd extensions/ingress/contour/
- Exclua o aplicativo controlador Contour Ingress.
kubectl delete app contour -n tanzu-system-ingress
Resultado esperado:
app.kappctrl.k14s.io "contour" deleted
. - Verifique se o aplicativo controlador Contour Ingress foi excluído.
kubectl get app contour -n tanzu-system-ingress
Resultado esperado:
apps.kappctrl.k14s.io "contour" not found
. - Exclua o namespace
tanzu-system-ingress
e a conta de serviço de extensão do Contour e os objetos de função.kubectl delete -f namespace-role.yaml
Atualizar a extensão Contour
- Exporte o mapa de configuração de contorno e salve-o como backup.
kubectl get configmap contour -n tanzu-system-ingress -o 'go-template={{ index .data "contour.yaml" }}' > contour-configmap.yaml
- Exclua a implantação existente do Contour. Consulte o Excluir a extensão Contour.
- Implante a extensão Contour mais recente. Consulte o Implantar a extensão Contour.
Configurar a extensão Contour
/extensions/ingress/contour/vsphere/contour-data-values.yaml
.
Parâmetro | Descrição | Tipo | Padrão |
---|---|---|---|
provedor_de_estrutura_de_estrutura | Provedor de infraestrutura. Valores compatíveis: vsphere, aws, azure | cadeia de caracteres | Parâmetro obrigatório |
contour.namespace | Namespace onde o Contour será implantado | cadeia de caracteres | tanzu-system-ingress |
contour.config.requestTimeout | O tempo limite da solicitação do cliente deve ser passado para o Envoy | time.Duração | 0s Consulte o Tempo limite de rota para downloads de arquivos. |
contour.config.server.xdsServerType | Tipo de servidor XDS a ser usado: Valores com suporte: contour ou enviado | cadeia de caracteres | Nulo |
contour.config.tls.minimumProtocolVersion | Versão mínima do TLS que a Contour negociará | cadeia de caracteres | 1.1 |
contour.config.tls.fallbackCertificate.name | Nome do segredo que contém o certificado de fallback para solicitações que não correspondem ao SNI definido para um vhost | cadeia de caracteres | Nulo |
contour.config.tls.fallbackCertificate.namespace | Namespace do segredo que contém o certificado de fallback | cadeia de caracteres | Nulo |
contour.config.tls.envoyClientCertificate.name | Nome do segredo a ser usado como certificado de cliente, chave privada para conexão TLS com o serviço de back-end | cadeia de caracteres | Nulo |
contour.config.tls.envoyClientCertificate.namespace | Namespace do segredo a ser usado como certificado de cliente, chave privada para conexão TLS com o serviço de back-end | cadeia de caracteres | Nulo |
contour.config.leaderelection.configmapName | Nome do mapa de configuração a ser usado para a seleção de líderes de contorno | cadeia de caracteres | líder eleito |
contour.config.leaderelection.configmapNamespace | Namespace do mapa de configuração de seleção de líderes de contorno | cadeia de caracteres | tanzu-system-ingress |
contour.config.disablePermitInsecure | Desativa o campo ingressroute permitInsecure | boolean | falso |
contour.config.accesslogFormat | Formato de log de acesso | cadeia de caracteres | enviado |
contour.config.jsonFields | Campos que serão registrados | matriz de cadeias de caracteres | https://godoc.org/github.com/projectcontour/contour/internal/envoy#JSONFields |
contour.config.useProxyProtocol | https://projectcontour.io/guides/proxy-proto/ | boolean | falso |
contour.config.defaultHTTPVersions | Versões HTTP que o Contour deve programar o Envoy para servir | matriz de cadeias de caracteres | "HTTP / 1.1 HTTP2" |
contour.config.timeouts.requestTimeout | O tempo limite de uma solicitação inteira | time.Duração | Nulo (o tempo limite está desativado) |
contour.config.timeouts.connectionIdleTimeout | O tempo de espera antes de encerrar uma conexão ociosa | time.Duração | Anos 60 |
contour.config.timeouts.streamIdleTimeout | O tempo de espera antes de encerrar uma solicitação ou fluxo sem atividade | time.Duração | 5m |
contour.config.timeouts.maxConnectionDuração | O tempo de espera antes de encerrar uma conexão, independentemente da atividade ou não | time.Duração | Nulo (o tempo limite está desativado) |
contour.config.timeouts.ConnectionShutdownGracePeriod | O tempo de espera entre o envio de um GOAWAY inicial e final | time.Duração | 5s |
contour.config.cluster.dnsLookupFamily | família dns-lookup a ser usada para solicitações upstream para serviços do tipo externalName de uma rota HTTPProxy | cadeia de caracteres | Nulo (Valores compatíveis: auto, v4, v6) |
contour.config.debug | Ativar depuração de contorno | boolean | falso |
contour.config.ingressStatusAddress | O endereço para definir o status de cada recurso de entrada | cadeia de caracteres | Nulo |
contour.certificate.duration | Duração do certificado de contorno | time.Duração | 8760h |
contour.certificate.renewBefore | Duração antes de o certificado de contorno ser renovado | time.Duração | 360h |
contour.deployment.replicas | Número de réplicas de contorno | número inteiro | 2 |
contour.image.repository | Localização do repositório com a imagem Contour. O padrão é o registro público VMware. Altere esse valor se você estiver usando um repositório privado (por exemplo, ambiente isolado). | cadeia de caracteres | projects.registry.vmware.com/tkg |
contour.image.name | Nome da imagem de contorno | cadeia de caracteres | contorno |
contour.image.tag | Marca de imagem de contorno. Esse valor pode precisar ser atualizado se você estiver atualizando a versão do Contour. | cadeia de caracteres | v1.11.0_vmware.1 |
contour.image.pullPolicy | Política de recebimento de imagem Contour | cadeia de caracteres | IfNotPresent |
envoy.image.repository | Localização do repositório com a imagem do Envoy. O padrão é o registro público VMware. Altere esse valor se você estiver usando um repositório privado (por exemplo, ambiente isolado). | cadeia de caracteres | projects.registry.vmware.com/tkg |
envoy.image.name | Nome da imagem do enviado | cadeia de caracteres | enviado |
envoy.image.tag | Etiqueta de imagem do Envoy. Esse valor pode precisar ser atualizado se você estiver atualizando a versão do Envoy. | cadeia de caracteres |
Observação: Não use a imagem do Envoy
v1.16.2_vmware.1 devido a um CVE. Para obter mais informações, consulte as
notas da versão .
|
envoy.image.pullPolicy | Política de recebimento de imagem do Envoy | cadeia de caracteres | IfNotPresent |
envoy.hostPort.enable | Sinalizar para expor as portas do enviado no host | boolean | verdadeiro |
envoy.hostPort.http | Porta do host HTTP do Envoy | número inteiro | 80 |
envoy.hostPort.https | Porta do host HTTPS do Envoy | número inteiro | 443 |
envoy.service.type | Tipo de serviço para expor o enviado. Valores com suporte: ClusterIP, NodePort, LoadBalancer | cadeia de caracteres | Parâmetro obrigatório para vSphere: NodePort ou LoadBalancer, AWS: LoadBalancer, Azure: LoadBalancer |
envoy.service.annotations | Anotações do serviço Envoy | Mapa (valores-chave) | Mapa vazio |
envoy.service.externalTrafficPolicy | Política de tráfego externo do serviço de envio. Valores com suporte: local, cluster | cadeia de caracteres | Cluster |
envoy.service.nodePort.http | NodePort desejado para o serviço do tipo NodePort usado para solicitações http | número inteiro | Nulo - O Kubernetes atribui uma porta de nó dinâmica |
envoy.service.nodePort.https | NodePort desejado para o serviço do tipo NodePort usado para solicitações HTTPS | número inteiro | Nulo - O Kubernetes atribui uma porta de nó dinâmica |
envoy.deployment.hostNetwork | Execute o envoy em hostNetwork | boolean | falso |
envoy.service.aws.LBType | O tipo de AWS LB a ser usado para expor o serviço do Envoy. Valores compatíveis: clássico, nlb | cadeia de caracteres | clássico |
envoy.loglevel | Nível de log a ser usado para o enviado | cadeia de caracteres | informação |
Tempo limite de rota para downloads de arquivos
O parâmetro contour.config.requestTimeout
define o tempo limite do caminho de contorno. O valor padrão é 0s
. Para a maioria dos casos de uso, essa configuração é apropriada. No entanto, se você estiver tentando usar o Contour com o Envoy para transferência de arquivos, esse valor exigirá mais explicações.
De acordo com a documentação do Contour , um valor de tempo limite de 0s
será tratado como se o campo não estivesse definido, ou seja, o Contour irá adiar para o Envoy e usar seu comportamento padrão. De acordo com a documentação do Envoy , por padrão, o Envoy tem um tempo limite de 15 segundos. Além disso, o Envoy espera que toda a operação de solicitação-resposta seja concluída em 15 segundos. Para transferências de arquivos grandes, isso pode não ser suficiente. Para desativar o tempo limite do Envoy, defina o valor de contour.config.requestTimeout
como 0
.