Em um cluster Kubernetes, o NGINX Ingress gerencia o acesso externo aos serviços e fornece balanceamento de carga na camada 7. Você pode usar um NGINX Ingress para configurar URLs acessíveis externamente, regras de rewrite, serviços HTTPS e recursos de canary release. Este tópico descreve como configurar roteamento seguro, estabelecer autenticação mútua HTTPS, usar expressões regulares e nomes de domínio com wildcard, além de solicitar certificados HTTPS gratuitos.
Pré-requisitos
Antes de começar, certifique-se de ter:
Instalado o controlador NGINX Ingress. Para mais informações, consulte Instalar o controlador NGINX Ingress.
Um cliente kubectl conectado ao cluster. Para mais informações, consulte Obter o KubeConfig do cluster e usar o kubectl para conectar-se ao cluster.
Um serviço exposto por um NGINX Ingress. Para mais informações, consulte Criar e usar um NGINX Ingress para expor um serviço.
Métodos de configuração
O controlador NGINX Ingress no Container Service for Kubernetes (ACK) é totalmente compatível com a comunidade open source. Para mais informações, consulte NGINX Configuration.
Há três métodos de configuração suportados:
|
Método |
Escopo |
Referência |
|
Baseado em Annotation |
Por Ingress — configure annotations no arquivo YAML de um NGINX Ingress específico |
|
|
Baseado em ConfigMap |
Global — configure o ConfigMap |
|
|
Modelo NGINX personalizado |
Avançado — modifique o modelo interno do NGINX diretamente quando os métodos baseados em annotation e ConfigMap não atenderem aos seus requisitos |
Configurar redirecionamento de URL
Por padrão, o controlador NGINX Ingress encaminha solicitações com base no caminho completo da requisição. Por exemplo, uma solicitação para /service1/api é encaminhada diretamente para /service1/api no pod de backend. Se o caminho do serviço de backend for /api, o sistema retornará um erro 404 porque o caminho não corresponde. Use a annotation nginx.ingress.kubernetes.io/rewrite-target para reescrever o caminho da solicitação para o diretório correto.
Crie um NGINX Ingress com base na versão do seu cluster.
Clusters que executam Kubernetes 1.19 ou posterior
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: foo.bar.com
namespace: default
annotations:
# URL redirection.
nginx.ingress.kubernetes.io/rewrite-target: /$2
spec:
rules:
- host: foo.bar.com
http:
paths:
# If the Ingress controller version is 0.22.0 or later, you must use a regular expression to define the path in the path field and use it with a capturing group in the rewrite-target annotation.
- path: /svc(/|$)(.*)
backend:
service:
name: web1-service
port:
number: 80
pathType: ImplementationSpecific
Clusters que executam versões do Kubernetes anteriores à 1.19
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
name: foo.bar.com
namespace: default
annotations:
# URL redirection.
nginx.ingress.kubernetes.io/rewrite-target: /$2
spec:
rules:
- host: foo.bar.com
http:
paths:
# If the Ingress controller version is 0.22.0 or later, you must use a regular expression to define the path in the path field and use it with a capturing group in the rewrite-target annotation.
- path: /svc(/|$)(.*)
backend:
serviceName: web1-service
servicePort: 80
Após implantar o Ingress, verifique a configuração:
-
Obtenha o endereço do Ingress.
kubectl get ingressSaída esperada:
NAME CLASS HOSTS ADDRESS PORTS AGE foo.bar.com nginx foo.bar.com 172.16.XX.XX 80 46m -
Teste a regra de rewrite. Substitua
ADDRESSpelo endereço IP obtido na etapa anterior.curl -k -H "Host: foo.bar.com" http://<ADDRESS>/svc/fooSaída esperada:
web1: /foo
Configurar regras avançadas de rewrite
Para reescrita básica de URL, use a annotation nginx.ingress.kubernetes.io/rewrite-target conforme descrito em Configurar redirecionamento de URL.
Para requisitos complexos de reescrita, use as seguintes annotations para adicionar trechos personalizados à configuração do NGINX:
|
Annotation |
Onde se aplica |
|
|
Adiciona um trecho de configuração ao bloco |
|
|
Adiciona um trecho de configuração ao bloco |
Exemplo:
annotations:
nginx.ingress.kubernetes.io/server-snippet: |
rewrite ^/v4/(.*)/card/query http://foo.bar.com/v5/#!/card/query permanent;
nginx.ingress.kubernetes.io/configuration-snippet: |
rewrite ^/v6/(.*)/card/query http://foo.bar.com/v7/#!/card/query permanent;
Para visualizar a configuração gerada do NGINX, execute o comando abaixo. Substitua o nome do pod pelo nome real do pod do controlador NGINX Ingress no seu cluster.
kubectl exec nginx-ingress-controller-xxxxx --namespace kube-system -- cat /etc/nginx/nginx.conf
A configuração acima gera a seguinte saída no nginx.conf:
# start server foo.bar.com
server {
server_name foo.bar.com ;
listen 80;
listen [::]:80;
set $proxy_upstream_name "-";
# server-snippet configuration.
rewrite ^/v4/(.*)/card/query http://foo.bar.com/v5/#!/card/query permanent;
...
# configuration-snippet configuration.
rewrite ^/v6/(.*)/card/query http://foo.bar.com/v7/#!/card/query permanent;
...
}
# end server foo.bar.com
As annotations de snippet também suportam configurações globais. Para mais informações, consulte server-snippet. Para a referência completa da diretiva rewrite do NGINX, veja a documentação oficial do NGINX.
Configurar um certificado HTTPS
Use a semântica TLS nativa do Ingress para configurar um certificado HTTPS para o seu serviço.
-
Prepare seu certificado TLS.
Gere um certificado autoassinado e uma chave privada. ``
bash openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout tls.key -out tls.crt -subj "/CN=foo.bar.com/O=foo.bar.com"``-
Crie um Secret do Kubernetes a partir do certificado e da chave privada. Referencie este Secret no Ingress.
kubectl create secret tls tls-test-ingress --key tls.key --cert tls.crt
O CN (Common Name) do certificado deve corresponder ao host configurado no Ingress. Caso não correspondam, o controlador NGINX Ingress não conseguirá carregar o certificado.
-
Crie um recurso Ingress que referencie o Secret no campo
tls. Kubernetes 1.19 ou posteriorClusters que executam Kubernetes 1.19 ou posterior
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: test-test-ingress spec: # Reference the TLS certificate. tls: - hosts: - foo.bar.com # The domain name that corresponds to the certificate. secretName: tls-test-ingress rules: - host: tls-test-ingress.com http: paths: - path: /foo backend: service: name: web1-svc port: number: 80 pathType: ImplementationSpecificClusters que executam versões do Kubernetes anteriores à 1.19
apiVersion: networking.k8s.io/v1beta1 kind: Ingress metadata: name: test-test-ingress spec: # Reference the TLS certificate. tls: - hosts: - foo.bar.com # The domain name that corresponds to the certificate. secretName: tls-test-ingress rules: - host: tls-test-ingress.com http: paths: - path: /foo backend: serviceName: web1-svc servicePort: 80 Atualize seu arquivo
/etc/hostsou use um nome de domínio real para acessar o serviço TLS emhttps://tls-test-ingress.com/foo.
Configurar autenticação mútua HTTPS
A autenticação mútua HTTPS (mTLS) exige que tanto o servidor quanto o cliente apresentem certificados, proporcionando uma segurança de conexão mais robusta do que o TLS unidirecional. O controlador NGINX Ingress suporta mTLS por meio de annotations.
Etapa 1: Criar os certificados
-
Crie um certificado CA autoassinado.
openssl req -x509 -sha256 -newkey rsa:4096 -keyout ca.key -out ca.crt -days 356 -nodes -subj '/CN=Fern Cert Authority'Saída esperada:
Generating a 4096 bit RSA private key .............................................................................................................++ .....................................................................................++ writing new private key to 'ca.key' -
Crie o certificado do lado do servidor.
-
Gere a solicitação de assinatura de certificado (CSR).
openssl req -new -newkey rsa:4096 -keyout server.key -out server.csr -nodes -subj '/CN=foo.bar.com'Saída esperada:
Generating a 4096 bit RSA private key ................................................................................................................................++ .................................................................++ writing new private key to 'server.key' -
Assine a CSR com o certificado CA.
openssl x509 -req -sha256 -days 365 -in server.csr -CA ca.crt -CAkey ca.key -set_serial 01 -out server.crtSaída esperada:
Signature ok subject=/CN=foo.bar.com Getting CA Private Key
-
-
Crie o certificado do lado do cliente.
-
Gere a CSR do cliente.
openssl req -new -newkey rsa:4096 -keyout client.key -out client.csr -nodes -subj '/CN=Fern'Saída esperada:
Generating a 4096 bit RSA private key .......................................................................................................................................................................................++ ..............................................++ writing new private key to 'client.key' ----- -
Assine a CSR do cliente com o certificado CA.
openssl x509 -req -sha256 -days 365 -in client.csr -CA ca.crt -CAkey ca.key -set_serial 02 -out client.crtSaída esperada:
Signature ok subject=/CN=Fern Getting CA Private Key
-
-
Confirme se todos os arquivos de certificado estão presentes.
lsSaída esperada:
ca.crt ca.key client.crt client.csr client.key server.crt server.csr server.key
Etapa 2: Criar Secrets
-
Crie um Secret para o certificado CA.
kubectl create secret generic ca-secret --from-file=ca.crt=ca.crtSaída esperada:
secret/ca-secret created -
Crie um Secret para o certificado do servidor.
kubectl create secret generic tls-secret --from-file=tls.crt=server.crt --from-file=tls.key=server.keySaída esperada:
secret/tls-secret created
Etapa 3: Implantar o Ingress
Implante o modelo a seguir para criar um NGINX Ingress com mTLS habilitado.
Clusters que executam Kubernetes 1.19 ou posterior
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
annotations:
nginx.ingress.kubernetes.io/auth-tls-verify-client: "on"
nginx.ingress.kubernetes.io/auth-tls-secret: "default/ca-secret"
nginx.ingress.kubernetes.io/auth-tls-verify-depth: "1"
nginx.ingress.kubernetes.io/auth-tls-pass-certificate-to-upstream: "true"
name: nginx-test
namespace: default
spec:
rules:
- host: foo.bar.com
http:
paths:
- backend:
service:
name: http-svc
port:
number: 80
path: /
pathType: ImplementationSpecific
tls:
- hosts:
- foo.bar.com
secretName: tls-secret
Clusters que executam versões do Kubernetes anteriores à 1.19
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
annotations:
nginx.ingress.kubernetes.io/auth-tls-verify-client: "on"
nginx.ingress.kubernetes.io/auth-tls-secret: "default/ca-secret"
nginx.ingress.kubernetes.io/auth-tls-verify-depth: "1"
nginx.ingress.kubernetes.io/auth-tls-pass-certificate-to-upstream: "true"
name: nginx-test
namespace: default
spec:
rules:
- host: foo.bar.com
http:
paths:
- backend:
serviceName: http-svc
servicePort: 80
path: /
tls:
- hosts:
- foo.bar.com
secretName: tls-secret
Saída esperada:
ingress.networking.k8s.io/nginx-test configured
Etapa 4: Verificar
-
Obtenha o endereço IP do Ingress.
kubectl get ingO campo
ADDRESScontém o endereço IP do Ingress:NAME HOSTS ADDRESS PORTS AGE nginx-test foo.bar.com 39.102.XX.XX 80, 443 4h42m -
Atualize o arquivo
/etc/hosts. Substitua o endereço IP de exemplo pelo endereço IP real do Ingress.echo "39.102.XX.XX foo.bar.com" | sudo tee -a /etc/hosts -
Teste o acesso sem um certificado de cliente — o servidor deve rejeitar a solicitação.
curl --cacert ./ca.crt https://foo.bar.comSaída esperada:
<html> <head><title>400 No required SSL certificate was sent</title></head> <body> <center><h1>400 Bad Request</h1></center> <center>No required SSL certificate was sent</center> <hr><center>nginx/1.19.0</center> </body> </html> -
Teste o acesso com um certificado de cliente — a solicitação deve ser bem-sucedida.
curl --cacert ./ca.crt --cert ./client.crt --key ./client.key https://foo.bar.comSaída esperada:
<!DOCTYPE html> <html> <head> <title>Welcome to nginx!</title> <style> body { width: 35em; margin: 0 auto; font-family: Tahoma, Verdana, Arial, sans-serif; } </style> </head> <body> <h1>Welcome to nginx!</h1> <p>If you see this page, the nginx web server is successfully installed and working. Further configuration is required.</p> <p>For online documentation and support please refer to <a href="http://nginx.org/">nginx.org</a>.<br/> Commercial support is available at <a href="http://nginx.com/">nginx.com</a>.</p> <p>Thank you for using nginx!</p> </body> </html>
Encaminhar tráfego para um backend HTTPS
Por padrão, o controlador NGINX Ingress encaminha solicitações para contêineres de backend via HTTP. Se o seu contêiner de backend usar HTTPS, adicione a annotation nginx.ingress.kubernetes.io/backend-protocol: "HTTPS" para encaminhar o tráfego via HTTPS.
Clusters que executam Kubernetes 1.19 ou posterior
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: backend-https
annotations:
# Note: You must specify that the backend service is an HTTPS service.
nginx.ingress.kubernetes.io/backend-protocol: "HTTPS"
spec:
tls:
- hosts:
- <YOUR-HOST-NAME>
secretName: <YOUR-SECRET-CERT-NAME>
rules:
- host: <YOUR-HOST-NAME>
http:
paths:
- path: /
backend:
service:
name: <YOUR-SERVICE-NAME>
port:
number: <YOUR-SERVICE-PORT>
pathType: ImplementationSpecific
Clusters que executam versões do Kubernetes anteriores à 1.19
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
name: backend-https
annotations:
# Note: You must specify that the backend service is an HTTPS service.
nginx.ingress.kubernetes.io/backend-protocol: "HTTPS"
spec:
tls:
- hosts:
- <YOUR-HOST-NAME>
secretName: <YOUR-SECRET-CERT-NAME>
rules:
- host: <YOUR-HOST-NAME>
http:
paths:
- path: /
backend:
serviceName: <YOUR-SERVICE-NAME>
servicePort: <YOUR-SERVICE-PORT>
Configurar nomes de domínio com expressões regulares
Os recursos Ingress do Kubernetes não suportam expressões regulares no campo host nativamente. Use a annotation nginx.ingress.kubernetes.io/server-alias para adicionar correspondência de nomes de domínio baseada em regex.
-
Implante o seguinte Ingress. Este exemplo usa a expressão regular
~^www\.\d+\.example\.com. Kubernetes 1.19 ou posteriorClusters que executam Kubernetes 1.19 ou posterior
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: ingress-regex namespace: default annotations: nginx.ingress.kubernetes.io/server-alias: '~^www\.\d+\.example\.com$, abc.example.com' spec: rules: - host: foo.bar.com http: paths: - path: /foo backend: service: name: http-svc1 port: number: 80 pathType: ImplementationSpecificClusters que executam versões do Kubernetes anteriores à 1.19
apiVersion: networking.k8s.io/v1beta1 kind: Ingress metadata: name: ingress-regex namespace: default annotations: nginx.ingress.kubernetes.io/server-alias: '~^www\.\d+\.example\.com$, abc.example.com' spec: rules: - host: foo.bar.com http: paths: - path: /foo backend: serviceName: http-svc1 servicePort: 80 -
Verifique a configuração no controlador NGINX Ingress.
-
Liste os pods do controlador NGINX Ingress.
kubectl get pods -n kube-system | grep nginx-ingress-controllerSaída esperada:
nginx-ingress-controller-77cd987c4c-c**** 1/1 Running 0 1h nginx-ingress-controller-77cd987c4c-x**** 1/1 Running 0 1h -
Inspecione o campo
server_namena configuração gerada do NGINX.kubectl exec -n kube-system nginx-ingress-controller-77cd987c4c-c**** cat /etc/nginx/nginx.conf | grep -C3 "foo.bar.com"Saída esperada:
# start server foo.bar.com server { -- server { server_name foo.bar.com abc.example.com ~^www\.\d+\.example\.com$ ; listen 80 ; listen 443 ssl http2 ; -- -- } } # end server foo.bar.com
-
-
Obtenha o endereço IP do Ingress.
kubectl get ingSaída esperada:
NAME HOSTS ADDRESS PORTS AGE ingress-regex foo.bar.com 101.37.XX.XX 80 11s -
Teste o acesso ao serviço com diferentes cabeçalhos de host. Substitua
IP_ADDRESSpelo endereço IP do Ingress obtido na etapa anterior.-
Acesse usando
foo.bar.com:curl -H "Host: foo.bar.com" <IP_ADDRESS>/fooSaída esperada:
/foo -
Acesse usando
www.123.example.com(corresponde à regex):curl -H "Host: www.123.example.com" <IP_ADDRESS>/fooSaída esperada:
/foo -
Acesse usando
www.321.example.com(também corresponde à regex):curl -H "Host: www.321.example.com" <IP_ADDRESS>/fooSaída esperada:
/foo
-
Configurar nomes de domínio com wildcard
O NGINX Ingress suporta nomes de domínio com wildcard. O exemplo a seguir configura *.ingress-regex.com para corresponder a qualquer subdomínio.
-
Implante o seguinte Ingress.
Clusters que executam Kubernetes 1.19 ou posterior
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: ingress-regex namespace: default spec: rules: - host: *.ingress-regex.com http: paths: - path: /foo backend: service: name: http-svc1 port: number: 80 pathType: ImplementationSpecificClusters que executam versões do Kubernetes anteriores à 1.19
apiVersion: networking.k8s.io/v1beta1 kind: Ingress metadata: name: ingress-regex namespace: default spec: rules: - host: *.ingress-regex.com http: paths: - path: /foo backend: serviceName: http-svc1 servicePort: 80 -
Verifique o campo
server_namena configuração do NGINX. Substitua<nginx-ingress-pod-name>pelo nome real do pod do NGINX Ingress.kubectl exec -n kube-system <nginx-ingress-pod-name> cat /etc/nginx/nginx.conf | grep -C3 "*.ingress-regex.com"Saída esperada:
# start server *.ingress-regex.com server { server_name *.ingress-regex.com ; listen 80; listen [::]:80; ... } # end server *.ingress-regex.comEm versões mais recentes do controlador NGINX Ingress, a saída é:
## start server *.ingress-regex.com server { server_name ~^(?<subdomain>[\w-]+)\.ingress-regex\.com$ ; listen 80; listen [::]:80; ... } ## end server *.ingress-regex.com -
Obtenha o endereço IP do Ingress.
kubectl get ingSaída esperada:
NAME HOSTS ADDRESS PORTS AGE ingress-regex *.ingress-regex.com 101.37.XX.XX 80 11s -
Teste o acesso com diferentes subdomínios. Substitua
IP_ADDRESSpelo endereço IP do Ingress obtido na etapa anterior.-
Acesse usando
abc.ingress-regex.com:curl -H "Host: abc.ingress-regex.com" <IP_ADDRESS>/fooSaída esperada:
/foo -
Acesse usando
123.ingress-regex.com:curl -H "Host: 123.ingress-regex.com" <IP_ADDRESS>/fooSaída esperada:
/foo -
Acesse usando
a1b1.ingress-regex.com:curl -H "Host: a1b1.ingress-regex.com" <IP_ADDRESS>/fooSaída esperada:
/foo
-
Implementar canary releases
Use annotations de canary para rotear um subconjunto do tráfego para uma nova versão do serviço sem uma implantação completa. Ative o roteamento canary definindo nginx.ingress.kubernetes.io/canary: "true" no Ingress canary e combine-o com uma ou mais annotations de estratégia de roteamento.
|
Annotation |
Tipo |
Descrição |
|
|
Inteiro (0–100) |
Percentual de solicitações roteadas para o serviço canary |
|
|
String |
Roteia com base em um cabeçalho de solicitação. Quando o valor do cabeçalho é |
|
|
String |
Use com |
|
|
String |
Roteia com base em um cookie. Suporta apenas |
Prioridade das regras da maior para a menor: baseada em cabeçalho → baseada em cookie → baseada em peso. O roteamento canary baseado em cookie suporta apenas os valoresalwaysenever.
Os exemplos a seguir mostram configurações comuns de canary. Para um guia completo, incluindo implantações blue-green, consulte Usar um NGINX Ingress para implementar canary releases e implantações blue-green.
Canary release baseado em peso — roteia 20% do tráfego para o serviço canary:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
annotations:
kubernetes.io/ingress.class: nginx
nginx.ingress.kubernetes.io/canary: "true"
nginx.ingress.kubernetes.io/canary-weight: "20"
Canary release baseado em cabeçalho — quando o cabeçalho de solicitação ack for always, roteia para o serviço canary; quando for never, ignora o serviço canary; para outros valores de cabeçalho, roteia com base no peso:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
annotations:
kubernetes.io/ingress.class: nginx
nginx.ingress.kubernetes.io/canary: "true"
nginx.ingress.kubernetes.io/canary-weight: "50"
nginx.ingress.kubernetes.io/canary-by-header: "ack"
Canary release baseado em cabeçalho com valor personalizado — roteia para o serviço canary apenas quando o cabeçalho ack for exatamente alibaba; caso contrário, aplica o roteamento baseado em peso:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
annotations:
kubernetes.io/ingress.class: nginx
nginx.ingress.kubernetes.io/canary: "true"
nginx.ingress.kubernetes.io/canary-weight: "20"
nginx.ingress.kubernetes.io/canary-by-header: "ack"
nginx.ingress.kubernetes.io/canary-by-header-value: "alibaba"
Canary release baseado em cookie — quando nenhuma regra de cabeçalho corresponder e o cookie hangzhou_region for always, roteia para o serviço canary:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
annotations:
kubernetes.io/ingress.class: nginx
nginx.ingress.kubernetes.io/canary: "true"
nginx.ingress.kubernetes.io/canary-weight: "20"
nginx.ingress.kubernetes.io/canary-by-header: "ack"
nginx.ingress.kubernetes.io/canary-by-header-value: "alibaba"
nginx.ingress.kubernetes.io/canary-by-cookie: "hangzhou_region"
Solicitar um certificado HTTPS gratuito com cert-manager
O cert-manager é uma ferramenta de gerenciamento de certificados open source que provisiona e renova automaticamente certificados HTTPS em um cluster.
O cert-manager é um componente open source que o ACK não mantém. Use-o com cautela em ambientes de produção. Para atualizar a versão, consulte Upgrading cert-manager.
-
Implante o cert-manager.
kubectl apply -f https://github.com/cert-manager/cert-manager/releases/latest/download/cert-manager.yaml -
Verifique se os pods do cert-manager estão em execução.
kubectl get pods -n cert-managerSaída esperada:
NAME READY STATUS RESTARTS AGE cert-manager-1 1/1 Running 0 2m11s cert-manager-cainjector 1/1 Running 0 2m11s cert-manager-webhook 1/1 Running 0 2m10s -
Crie um ClusterIssuer usando o desafio HTTP01 do Let's Encrypt.
apiVersion: cert-manager.io/v1 kind: ClusterIssuer metadata: name: letsencrypt-prod-http01 spec: acme: server: https://acme-v02.api.letsencrypt.org/directory email: <your_email@example.com> # Replace this with your email address. privateKeySecretRef: name: letsencrypt-http01 solvers: - http01: ingress: class: nginx -
Verifique se o ClusterIssuer está pronto.
kubectl get clusterissuerSaída esperada:
NAME READY AGE letsencrypt-prod-http01 True 17s -
Crie um recurso Ingress que referencie o ClusterIssuer. Kubernetes 1.19 ou posterior
O nome de domínio deve atender aos seguintes requisitos: no máximo 64 caracteres, sem nomes de domínio wildcard e acessível pela rede pública usando HTTP.
Clusters que executam Kubernetes 1.19 ou posterior
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: ingress-tls annotations: kubernetes.io/ingress.class: "nginx" cert-manager.io/cluster-issuer: "letsencrypt-prod-http01" spec: tls: - hosts: - <YOUR_DOMAIN_NAME> # Replace this with your domain name. secretName: ingress-tls rules: - host: <YOUR_DOMAIN_NAME> # Replace this with your domain name. http: paths: - path: / backend: service: name: <YOUR_SERVICE_NAME> # Replace this with your backend service name. port: number: <YOUR_SERVICE_PORT> # Replace this with your service port. pathType: ImplementationSpecificClusters que executam versões do Kubernetes anteriores à 1.19
apiVersion: extensions/v1beta1 kind: Ingress metadata: name: ingress-tls annotations: kubernetes.io/ingress.class: "nginx" cert-manager.io/cluster-issuer: "letsencrypt-prod-http01" spec: tls: - hosts: - <YOUR_DOMAIN_NAME> # Replace this with your domain name. secretName: ingress-tls rules: - host: <YOUR_DOMAIN_NAME> # Replace this with your domain name. http: paths: - path: / backend: serviceName: <YOUR_SERVICE_NAME> # Replace this with your backend service name. servicePort: <YOUR_SERVICE_PORT> # Replace this with your service port. -
Verifique se o certificado foi emitido.
kubectl get certSaída esperada:
NAME READY SECRET AGE ingress-tls True ingress-tls 52mSe
READYnão forTrue, executekubectl describe cert ingress-tlspara inspecionar o procedimento de processamento do certificado. -
Verifique o Secret TLS.
kubectl get secret ingress-tlsSaída esperada:
NAME TYPE DATA AGE ingress-tls kubernetes.io/tls 2 2m Acesse o serviço em
https://<YOUR_DOMAIN_NAME>no navegador.
Configurar redirecionamento de HTTP para HTTPS
Use a annotation nginx.ingress.kubernetes.io/ssl-redirect para forçar o redirecionamento do tráfego HTTP para HTTPS.
Clusters que executam Kubernetes 1.19 ou posterior
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
annotations:
nginx.ingress.kubernetes.io/ssl-redirect: "true" # Force the redirection of HTTP traffic to HTTPS.
Clusters que executam versões do Kubernetes anteriores à 1.19
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
annotations:
nginx.ingress.kubernetes.io/ssl-redirect: "true" # Force the redirection of HTTP traffic to HTTPS.