Configurando o Controlador de Entrada Nativa do OCI
Descubra como configurar e personalizar o controlador de entrada nativo do OCI para balancear a carga e rotear o tráfego de entrada para pods de serviço executados em nós de trabalho em um cluster do Kubernetes.
Quando você tiver instalado o controlador de entrada nativo do OCI (como um programa independente ou como complemento de cluster) e criado os recursos relacionados à entrada do Kubernetes necessários para usá-lo, poderá configurar o controlador de entrada nativo do OCI:
- Especificando Regras de Roteamento para o Controlador de Entrada Nativo do OCI
- Personalizando o Comportamento do Controlador de Entrada Nativo do OCI Usando Anotações
- Configurando um Portão de Prontidão do Pod
- Configurando Listeners TCP
- Adicionando Suporte a Solicitações HTTPS/TLS
- Agregando Portas do Listener HTTP/HTTPS
Especificando Regras de Roteamento para o Controlador de Entrada Nativo do OCI
Para especificar como o balanceador de carga do OCI criado pelo controlador de entrada nativo do OCI (instalado como programa independente ou como complemento de cluster) roteia as solicitações de entrada, especifique regras de roteamento no manifesto Ingress
.
Solicitações de roteamento com base no host
Você pode configurar o controlador de entrada nativo do OCI para rotear uma solicitação de entrada com base no nome do domínio no cabeçalho Host da solicitação (o host para o qual a solicitação foi originalmente enviada).
Para rotear uma solicitação para um serviço de backend e uma porta específicos com base no host, crie uma regra de roteamento no manifesto Ingress
. Se o host corresponder à regra de roteamento, o controlador de entrada nativo do OCI roteará a solicitação para o serviço de backend e a porta associados.
Por exemplo, você pode definir a regra a seguir para rotear solicitações enviadas originalmente para http://foo.bar.com
para um serviço de backend chamado ServiceA na porta 80. Todo o tráfego de entrada enviado originalmente para http://foo.bar.com
é roteado para ServiceA na porta 80.
kind: Ingress
...
spec:
rules:
- host: "foo.bar.com"
http:
paths:
- pathType: Prefix
path: /
backend:
serviceName: ServiceA
servicePort: 80
Rotear solicitações para diferentes serviços de backend com base no caminho
Você pode configurar o controlador de entrada nativo do OCI para rotear solicitações de entrada para diferentes serviços de backend, com base nos elementos no caminho para o qual as solicitações foram enviadas originalmente.
Para rotear uma solicitação para um serviço de backend e uma porta específicos com base no caminho, crie uma regra de roteamento no manifesto Ingress
. Se o caminho corresponder à regra de roteamento, o controlador de entrada nativo do OCI roteará a solicitação para o serviço de backend e a porta associados. Você pode especificar vários caminhos na mesma regra para rotear solicitações para diferentes backends.
Por exemplo, você pode definir a seguinte regra para rotear solicitações com base no caminho para o qual a solicitação foi originalmente enviada:
- Se o caminho começar com /app1, o controlador de entrada nativo do OCI roteará a solicitação para um serviço de backend chamado ServiceA na porta 80.
- Se o caminho começar com /app2, o controlador de entrada nativo do OCI roteará a solicitação para um serviço de backend chamado ServiceB na porta 443.
Como a regra não especifica um host, ela se aplica a todo o tráfego de entrada.
kind: Ingress
...
spec:
rules:
- http:
paths:
- pathType: Prefix
path: /app1
backend:
serviceName: ServiceA
servicePort: 80
- pathType: Prefix
path: /app2
backend:
serviceName: ServiceB
servicePort: 443
Solicitações de roteamento com base no host e no caminho
Você pode configurar o controlador de entrada nativo do OCI para rotear uma solicitação de entrada com base no nome do domínio no cabeçalho Host da solicitação (o host para o qual a solicitação foi enviada originalmente) e nos elementos no caminho para o qual a solicitação original foi enviada.
Para rotear uma solicitação para um serviço de backend e uma porta específicos com base no host e no caminho, crie uma regra de roteamento no manifesto Ingress
. Se o host e o caminho corresponderem à regra de roteamento, o controlador de entrada nativo do OCI roteará a solicitação para o serviço de backend e a porta associados.
Por exemplo, você pode definir a seguinte regra para rotear solicitações originalmente enviadas para http://foo.bar.com/app1
para um serviço de backend chamado foo na porta 80:
kind: Ingress
...
spec:
rules:
- host: "foo.bar.com"
http:
paths:
- pathType: Prefix
path: /app1
backend:
serviceName: foo
servicePort: 80
Rotear solicitações para um backend padrão
Você pode configurar o controlador de entrada nativo do OCI para rotear solicitações de entrada para um backend padrão. Você pode configurar um backend padrão para tratar solicitações que não correspondem a nenhuma regra de roteamento.
Por exemplo, você pode definir o defaultBackend
a seguir para rotear solicitações que não correspondem a outras regras no manifesto Ingress
para um serviço de backend chamado ServiceC na porta 8080.
Observe que, se você não especificar outras regras em um manifesto Ingress
, deverá especificar um defaultBackend
.
kind: Ingress
...
spec:
rules:
- http:
paths:
- pathType: Prefix
path: /app1
backend:
serviceName: ServiceA
servicePort: 80
- pathType: Prefix
path: /app2
backend:
serviceName: ServiceB
servicePort: 443
defaultBackend:
service:
name: ServiceC
port:
number: 8080
Personalizando o Comportamento do Controlador de Entrada Nativo do OCI Usando Anotações
Você pode adicionar anotações aos manifestos de recursos IngressClass
ou Ingress
para personalizar o comportamento do controlador de entrada nativo do OCI (instalado como um programa independente ou como um complemento de cluster).
Personalizando o comportamento geral usando anotações
Você pode adicionar anotações aos manifestos de recursos IngressClass
ou Ingress
para personalizar o comportamento geral do controlador de entrada nativo do OCI.
Anotação | Descrição | Adicionar anotação a este manifesto de recursos | Exemplo |
---|---|---|---|
oci-native-ingress.oraclecloud.com/id |
OCID de um balanceador de carga do OCI existente a ser usado, em vez de criar um novo. Observe que, se você especificar um balanceador de carga existente, suas propriedades serão atualizadas conforme necessário para se alinhar aos valores nos manifestos de recursos IngressClassParameters e de Entrada. |
IngressClass |
oci-native-ingress.oraclecloud.com/id: ocid1.loadbalancer.oc1.iad.aaaaaaaan___u7a |
oci-native-ingress.oraclecloud.com/waf-policy-ocid |
OCID de uma política de firewall de aplicativo web (WAF) existente. Consulte Políticas do Serviço Web Application Firewall. | IngressClass |
oci-native-ingress.oraclecloud.com/waf-policy-ocid: ocid1.webappfirewallpolicy.oc1.iad.ama___aqq |
oci-native-ingress.oraclecloud.com/protocol |
Protocolo a ser usado para listener no balanceador de carga. Um de HTTP2 ou TCP. (Observe que, se você especificar HTTP2 como protocolo, um listener configurado por TLS será obrigatório.) |
Ingress |
oci-native-ingress.oraclecloud.com/protocol: "HTTP2" |
oci-native-ingress.oraclecloud.com/backend-tls-enabled |
Se os pods de serviço de backend podem receber solicitações de TLS. Se definido como |
Ingress |
oci-native-ingress.oraclecloud.com/backend-tls-enabled: "false" |
oci-native-ingress.oraclecloud.com/http-listener-port |
Crie uma única porta de listener para todos os caminhos HTTP sob essa entrada, em vez de criar uma porta de listener para cada porta de serviço. As políticas de roteamento são configuradas adequadamente. |
Ingress |
oci-native-ingress.oraclecloud.com/http-listener-port: "100" |
oci-native-ingress.oraclecloud.com/https-listener-port |
Crie uma única porta de listener para todos os caminhos HTTPS nessa entrada, em vez de criar uma porta de listener para cada porta de serviço. As políticas de roteamento são configuradas adequadamente. | Ingress |
oci-native-ingress.oraclecloud.com/https-listener-port: "500" |
oci-native-ingress.oraclecloud.com/policy |
Política a ser usada pelo conjunto de backend do balanceador de carga para distribuição de tráfego. | Ingress |
oci-native-ingress.oraclecloud.com/policy: "ROUND_ROBIN" |
Personalizando o comportamento de verificação de integridade usando anotações
Você pode adicionar anotações ao manifesto de recursos Ingress
para personalizar as verificações de integridade executadas pelo balanceador de carga criado pelo controlador de entrada nativo do OCI. Para obter mais informações sobre verificações de integridade do balanceador de carga, consulte Verificações de Integridade para Balanceadores de Carga.
Anotação | Descrição | Adicionar anotação a este manifesto de recursos | Exemplo |
---|---|---|---|
oci-native-ingress.oraclecloud.com/healthcheck-protocol |
Protocolo a ser usado para as verificações de integridade do conjunto de backend do balanceador de carga. | Ingress |
oci-native-ingress.oraclecloud.com/healthcheck-protocol: "HTTP" |
oci-native-ingress.oraclecloud.com/healthcheck-port |
Porta a ser usada para as verificações de integridade do conjunto de backend do balanceador de carga. | Ingress |
oci-native-ingress.oraclecloud.com/healthcheck-port: "80" |
oci-native-ingress.oraclecloud.com/healthcheck-path |
Caminho a ser usado para as verificações de integridade do conjunto de backend do balanceador de carga. | Ingress |
oci-native-ingress.oraclecloud.com/healthcheck-path: "/test" |
oci-native-ingress.oraclecloud.com/healthcheck-interval-milliseconds |
Intervalo entre as verificações de integridade do conjunto de backend do balanceador de carga. | Ingress |
oci-native-ingress.oraclecloud.com/healthcheck-interval-milliseconds: "1000" |
oci-native-ingress.oraclecloud.com/healthcheck-timeout-milliseconds |
Período após o qual a verificação de integridade do conjunto de backend do balanceador de carga é considerada como tendo falhado. | Ingress |
oci-native-ingress.oraclecloud.com/healthcheck-timeout-milliseconds: "750" |
oci-native-ingress.oraclecloud.com/healthcheck-retries |
Número de novas tentativas após as quais a verificação de integridade do conjunto de backend do balanceador de carga é considerada como tendo falhado. | Ingress |
oci-native-ingress.oraclecloud.com/healthcheck-retries: "5" |
oci-native-ingress.oraclecloud.com/healthcheck-return-code |
O código de status que o conjunto de backend do balanceador de carga deve retornar em resposta a uma verificação de integridade para ser considerado íntegro. | Ingress |
oci-native-ingress.oraclecloud.com/healthcheck-return-code: "200" |
oci-native-ingress.oraclecloud.com/healthcheck-response-regex |
Expressão regular para fazer parsing do corpo da resposta do conjunto de backend do balanceador de carga. É possível especificar qualquer valor regex (como * ou / ) ou um valor vazio. | Ingress |
oci-native-ingress.oraclecloud.com/healthcheck-response-regex: "*" |
oci-native-ingress.oraclecloud.com/healthcheck-force-plaintext |
Se uma verificação de integridade deve ser enviada para o backend do balanceador de carga sem SSL (somente HTTP). Se não for especificado, false será o valor padrão. |
Ingress |
oci-native-ingress.oraclecloud.com/healthcheck-force-plaintext: "true" |
Configurando um Portão de Prontidão do Pod
As portas de prontidão do pod são condições adicionais incluídas em um manifesto de pod para indicar que um pod está pronto para receber tráfego. Os portões de prontidão do pod permitem implementar verificações de prontidão personalizadas complexas e podem ajudar a obter tempo de inatividade zero durante implantações contínuas. Para obter mais informações, consulte detalhes de preparação do pod na documentação do Kubernetes.
Ao usar o controlador de entrada nativo do OCI (como um programa independente ou como complemento de cluster) com um cluster que tenha rede de pod nativo da VCN como o tipo de rede, você pode especificar que o controlador de entrada nativo do OCI deve injetar um portão de preparação de pod na especificação de pod de cada pod criado em um namespace específico. Observe que você não pode usar o controlador de entrada nativo do OCI para injetar portas de prontidão de pod em especificações de pod se o cluster tiver Sobreposição de canal como o tipo de rede.
Especifique se o controlador de entrada nativo do OCI deve injetar um portão de preparação de pod na especificação de pod de cada pod criado em um namespace específico digitando:
kubectl label ns <namespace> podreadiness.ingress.oraclecloud.com/pod-readiness-gate-inject=enabled
O controlador de entrada nativo do OCI injeta uma condição na especificação de pod de cada pod criado no namespace. Por exemplo:
kind: Pod
...
spec:
readinessGates:
- conditionType: podreadiness.ingress.oraclecloud.com/k8s_6b5b1b3a38
kubectl get pods -o wide -w
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
testecho-7cdcfff87f-b6xt4 1/1 Running 0 35s 10.0.10.242 10.0.10.135 <none> 0/1
testecho-7cdcfff87f-b6xt4 1/1 Running 0 72s 10.0.10.242 10.0.10.135 <none> 1/1
Configurando Listeners TCP
Você pode usar o controlador de entrada nativo do OCI (como um programa independente ou como complemento de cluster) para configurar listeners do balanceador de carga como listeners TCP. Cada listener TCP simplesmente encaminha o tráfego TCP recebido em uma porta específica para o serviço de backend especificado para essa porta em um manifesto de recursos Ingress
, sem executar qualquer roteamento da camada de transporte 7.
Você define a anotação oci-native-ingress.oraclecloud.com/protocol
para especificar que o controlador de entrada nativo do OCI deve criar um listener TCP para cada porta exclusiva incluída nas regras de roteamento em um manifesto de recursos Ingress
.
Para especificar que o controlador de entrada nativo do OCI deve criar listeners TCP:
- Defina um novo recurso de entrada em um arquivo .yaml. Consulte Criar recurso de Entrada.
- Na seção
metadata:
, adicione um elementoannotations:
e defina a anotaçãooci-native-ingress.oraclecloud.com/protocol
comoTCP
, no formato:kind: Ingress metadata: name: <i-name> annotations: oci-native-ingress.oraclecloud.com/protocol: TCP spec: ...
em que
name: <i-name>
é sua opção de nome para o recurso de entrada.Por exemplo:
kind: Ingress metadata: name: ingress-pass-through annotations: oci-native-ingress.oraclecloud.com/protocol: TCP spec: ...
- Na seção
rules:
do manifesto de recursosIngress
, adicione uma regra para cada listener que deve receber tráfego TCP:- (recomendado) Defina
paths.pathType
comoImplementationSpecific
. - Defina
paths.backend.service.name
como o nome do serviço de backend. - Defina
paths.backend.service.port.number
como a porta na qual escutar o tráfego TCP e para a qual encaminhar o tráfego TCP.
Por exemplo, se você quiser que um listener TCP na porta 8080 encaminhe o tráfego TCP para
my-first-svc:8080
e um listener TCP na porta 8081 encaminhe o tráfego TCP paramy-second-svc:8081
, poderá configurar um manifesto de recursosIngress
da seguinte forma:apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: ingress-pass-through annotations: oci-native-ingress.oraclecloud.com/protocol: TCP spec: rules: - http: paths: - pathType: ImplementationSpecific backend: service: name: my-first-svc port: number: 8080 - http: paths: - pathType: ImplementationSpecific backend: service: name: my-second-svc port: number: 8081
- (recomendado) Defina
-
Crie o recurso digitando
kubectl create -f <filename>.yaml
Adicionando Suporte a Solicitações HTTPS/TLS
Você pode usar o controlador de entrada nativo do OCI (como um programa independente ou como complemento de cluster) para oferecer suporte à comunicação HTTPS segura. Usando o controlador de entrada nativo do OCI, você pode configurar listeners e conjuntos de backend do balanceador de carga do OCI para tratar o tráfego criptografado usando TLS (anteriormente SSL).
Ao usar o controlador de entrada nativo do OCI para oferecer suporte à comunicação HTTPS, você tem duas opções:
- Opção 1: O Controlador de Entrada Nativo do OCI obtém certificado do serviço Certificates usando um segredo do Kubernetes: Você cria um segredo do Kubernetes e especifica o nome do segredo em um manifesto de recursos
Ingress
. O controlador de entrada nativo do OCI usa o segredo do Kubernetes para obter um certificado e um pacote de CAs (pacote de Autoridade de Certificação) do serviço OCI Certificates. O controlador de entrada nativo do OCI associa o certificado e o pacote de CAs ao listener e ao conjunto de backend. - Opção 2: Você obtém certificado do serviço Certificates: Você mesmo cria manualmente um certificado no serviço OCI Certificates. Em seguida, especifique o OCID do certificado no manifesto do recurso
Ingress
como uma anotação. O controlador de entrada nativo do OCI associa o certificado ao listener e ao conjunto de backend.
Ao tratar o tráfego HTTPS, o balanceador de carga do OCI criado pelo controlador de entrada nativo do OCI implementa TLS de ponta a ponta por padrão. O balanceador de carga usa certificados para aceitar uma solicitação criptografada TLS de um cliente e, em seguida, usa regras de roteamento para encaminhar a solicitação ao conjunto de backend apropriado. O conjunto de backend cria uma nova conexão TLS com backends em execução no cluster (usando o pacote de CAs como autoridade confiável para a nova conexão).
Observe o seguinte:
- Se você excluir um recurso
IngressClass
, o controlador de entrada nativo do OCI excluirá o balanceador de carga que ele criou (ou excluirá o balanceador de carga existente especificado pela anotaçãooci-native-ingress.oraclecloud.com/id
). No entanto, observe que o controlador de entrada não exclui recursos criados no serviço OCI Certificates. Você é responsável por excluir esses recursos de serviço de Certificados. Em particular, se você especificou um segredo do Kubernetes no manifesto de recursosIngress
, observe que você é responsável por excluir todos os recursos do serviço Certificates que o controlador de entrada nativo do OCI criou para você. - Os certificados obtidos do serviço OCI Certificates do tipo Importado não podem ser alternados automaticamente. Se você quiser que os certificados sejam alternados automaticamente, obtenha manualmente um certificado no serviço OCI Certificates especificando que deseja que o certificado seja emitido por uma CA interna do serviço Certificates (os certificados são do tipo Emitido por CA interna). Você pode configurar certificados do tipo Emitido por CA interna para serem alternados automaticamente.
- Se você especificar um segredo do Kubernetes no manifesto de recursos
Ingress
, observe que os certificados obtidos pelo controlador de entrada nativo do OCI do serviço Certificates são do tipo Importado e, portanto, não alternados automaticamente. Para rotacionar manualmente esses certificados de serviço de Certificados, primeiro crie um novo segredo do Kubernetes usando um novo par de chaves pública e privada TLS e um novo certificado. Em seguida, atualize o recursoIngress
com o nome do novo segredo. O controlador de entrada nativo do OCI obtém um novo certificado e um pacote de CAs do serviço Certificates e os associa ao listener e ao conjunto de backend (substituindo o certificado e o pacote de CAs anteriores). - Um listener só pode ser associado a um certificado. Portanto, não crie vários recursos de entrada que tenham regras especificando a mesma combinação de serviço/porta de backend, mas em que os recursos de entrada usem certificados diferentes.
- Por padrão, o balanceador de carga do OCI criado pelo controlador de entrada nativo do OCI implementa TLS de ponta a ponta. O balanceador de carga encerra a solicitação de TLS no listener e uma nova conexão de TLS é estabelecida entre o conjunto de backend e os backends. No entanto, se os backends não estiverem executando um servidor HTTPS e, portanto, você quiser que a conexão entre o conjunto de backend e os backends esteja em texto simples, defina a anotação
oci-native-ingress.oraclecloud.com/backend-tls-enabled
como"false"
. Quando a anotaçãooci-native-ingress.oraclecloud.com/backend-tls-enabled
é definida como"false"
, o balanceador de carga pode aceitar tráfego criptografado de um cliente, mas o tráfego entre o balanceador de carga e os backends não é criptografado.
Opção 1: O Controlador de Entrada Nativo do OCI obtém o certificado do serviço Certificates usando um segredo do Kubernetes
Para configurar o controlador de entrada nativo do OCI para obter um certificado do serviço OCI Certificates:
- Obtenha um par de chaves pública e privada TLS e um certificado.
Em ambientes de produção, você obtém um certificado TLS da Autoridade de Certificação escolhida enviando uma solicitação de assinatura de certificado. Durante o processo de solicitação de certificado, uma chave pública e a chave privada correspondente são geradas.
Em ambientes de desenvolvimento e teste, você mesmo pode criar um certificado autoassinado e gerar uma chave privada usando uma ferramenta como OpenSSL. Por exemplo (usando OpenSSL 3.0 ou posterior):
-
Gere um par de chaves pública e privada informando os seguintes comandos:
openssl genrsa -out rootCA.key 4096
openssl req -x509 -addext basicConstraints=critical,CA:TRUE -new -nodes -key rootCA.key -sha256 -days 1024 -out rootCA.crt -subj /CN=RootCA
-
Gere um certificado informando os seguintes comandos:
openssl genrsa -out server.key 4096
openssl req -new -sha256 -key server.key -subj /C=US/ST=CA/O=MyOrg,Inc./CN=my.example.com -out server.csr
openssl x509 -req -in server.csr -CA rootCA.crt -CAkey rootCA.key -CAcreateserial -out server.crt -days 500 -sha256
Neste exemplo:
rootCA.key
contém o par de chaves da CA raiz.rootCA.crt
contém o certificado da CA raiz.server.key
contém o par de chaves para gerar o certificado do servidor.server.csr
contém a solicitação de assinatura do certificado do servidor.server.crt
contém o certificado do servidor gerado.
-
- Crie um recurso secreto do Kubernetes de uma das seguintes maneiras:
-
Usando o comando
kubectl create secret generic
, digitando:kubectl create secret generic <k8s-secret-name> --type=kubernetes.io/tls --from-file=ca.crt=<path-and-filename>.crt --from-file=tls.crt=<path-and-filename>.crt --from-file=tls.key=<path-and-filename>.key
em que:
<k8s-secret-name>
é sua escolha de nome para o segredo do Kubernetes--from-file=ca.crt=<path-and-filename>.crt
especifica o caminho para o arquivo que contém o certificado da CA raiz. Por exemplo,--from-file=ca.crt=rootCA.crt
--from-file=tls.crt=<path-and-filename>.crt
especifica o caminho para o arquivo que contém o certificado do servidor gerado. Por exemplo,--from-file=tls.crt=server.crt
--from-file=tls.key=<path-and-filename>.key
especifica o caminho para o arquivo que contém a chave privada gerada. Por exemplo,--from-file=tls.key=server.key
Por exemplo:
kubectl create secret generic example-tls-secret --type=kubernetes.io/tls --from-file=ca.crt=rootCA.crt --from-file=tls.crt=server.crt --from-file=tls.key=server.key
- Usando um arquivo de manifesto de recursos
Secret
:-
Defina o segredo do Kubernetes em um arquivo .yaml, no formato:
apiVersion: v1 kind: Secret metadata: name: <k8s-secret-name> type: kubernetes.io/tls data: ca.crt: <base64-encoded-certificate-chain> tls.crt: <base64-encoded-server-certificate> tls.key: <base64-encoded-private-key>
em que:
name: <k8s-secret-name>
é sua escolha de nome para o recurso secreto do Kubernetes.ca.crt: <base64-encoded-certificate-chain>
é o conteúdo do arquivo (ou arquivos) que contém certificados intermediários que formam uma cadeia de certificados do certificado folha de volta para a Autoridade de Certificação. Observe que você pode omitirca.cert
, desde que inclua toda a cadeia de certificados como o valor detls.cert
(nesse caso, inicie a cadeia de certificados com o conteúdo do arquivo que contém o certificado do servidor gerado, seguido pelos certificados restantes).tls.crt: <base64-encoded-server-certificate>
é o conteúdo do arquivo que contém o certificado do servidor gerado.tls.key: <base64-encoded-private-key>
é o conteúdo do arquivo que contém a chave privada gerada.
Por exemplo:
apiVersion: v1 kind: Secret metadata: name: example-tls-secret type: kubernetes.io/tls data: ca.crt : MIIFGERTegcDFRTuSDGfghREdE______Jre tls.crt: MIIC2DCCAcCgAwIBAgIBATANBg______kqh tls.key: MIIEpgIBAAKCAQEA7yn3bRHQ5F______HMQ
-
Crie o recurso secreto digitando
kubectl create -f <filename>.yaml
-
-
- Adicione o segredo do Kubernetes a um manifesto de recursos
Ingress
:- Defina um novo recurso de entrada em um arquivo .yaml. Consulte Criar recurso de Entrada.
- Na seção
spec:
do manifesto, adicione um elementotls:
que especifique o host que receberá o tráfego HTTPS e o nome do segredo do Kubernetes, no formato:kind: Ingress ... spec: tls: - hosts: - <host-name> secretName: <k8s-secret-name>
Por exemplo:
kind: Ingress ... spec: tls: - hosts: - my.example.com secretName: example-tls-secret
- Na seção
rules:
do manifesto, adicione uma regra para o host que receberá o tráfego HTTPS e especifique 443 como a porta na qual escutar o tráfego HTTPS.Por exemplo:
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: acme-tls-secret-ingress spec: tls: - hosts: - my.example.com secretName: example-tls-secret rules: - host: "my.example.com" http: paths: - pathType: Prefix path: "/TLSPath" backend: service: name: tls-test port: number: 443
-
Crie o recurso digitando
kubectl create -f <filename>.yaml
Quando você cria o recurso de entrada, o controlador de entrada nativo do OCI usa o segredo do Kubernetes para obter um certificado do tipo Importado e um pacote de CAs (pacote de Autoridade de Certificação), do serviço OCI Certificates. O controlador de entrada nativo do OCI associa o certificado ao listener e o pacote de CAs ao conjunto de backend.
Quando o listener que atende na porta 443 recebe uma solicitação HTTPS para o host especificado, o listener usa o certificado para encerramento de TLS. Em seguida, o listener usa a regra de roteamento para encaminhar a solicitação ao conjunto de backend. O conjunto de backend cria uma nova conexão TLS com os backends em execução no cluster (usando o pacote de CAs como autoridade confiável para a nova conexão).
Opção 2: Você obtém o certificado do serviço Certificates
Para configurar o controlador de entrada nativo do OCI para usar um certificado obtido do serviço OCI Certificates:
- Crie um certificado no serviço OCI Certificates de uma das seguintes maneiras:
- importando um certificado emitido por uma CA de terceiros (o certificado será do tipo Importado)
- emitindo o certificado internamente de uma CA do serviço Certificates (o certificado será do tipo Issued by internal CA)
Não crie um certificado para gerenciar externamente (do tipo Emitido por CA interna, gerenciado externamente). Para obter mais informações, consulte Criando um Certificado.
- Anote o OCID do certificado.
- Adicione o OCID do certificado a um manifesto de recursos
Ingress
:- Defina um novo recurso de entrada em um arquivo .yaml. Consulte Criar recurso de Entrada.
- Na seção
metadata:
, adicione um elementoannotations:
que especifique o OCID do certificado criado no serviço OCI Certificates, no formato:kind: Ingress metadata: name: <i-name> annotations: oci-native-ingress.oraclecloud.com/certificate-ocid: <certificate-ocid> spec: ...
em que:
name: <i-name>
é sua escolha de nome para o recurso de entrada.oci-native-ingress.oraclecloud.com/certificate-ocid: <certificate-ocid>
é o OCID do certificado criado no serviço OCI Certificates
Por exemplo:
kind: Ingress metadata: name: acme-tls-certificate-ingress annotations: oci-native-ingress.oraclecloud.com/certificate-ocid: ocid1.certificate.oc1.iad.amaaaaaa______gabc spec: ...
- Na seção
rules:
do manifesto de recursosIngress
, adicione uma regra para o host que receberá o tráfego HTTPS e especifique 443 como a porta na qual escutar o tráfego HTTPS.Por exemplo:
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: acme-tls-certificate-ingress annotations: oci-native-ingress.oraclecloud.com/certificate-ocid: ocid1.certificate.oc1.iad.amaaaaaa______gabc spec: rules: - host: "my.example.com" http: paths: - pathType: Prefix path: "/TLSPath" backend: service: name: tls-test port: number: 443
-
Crie o recurso digitando
kubectl create -f <filename>.yaml
O que acontece quando você cria o recurso de entrada depende de como criou o certificado no serviço OCI Certificates:
- Se você criou o certificado importando um certificado emitido por uma CA de terceiros, o certificado será do tipo Importado. O controlador de entrada nativo do OCI associa o certificado ao listener, cria um pacote de CAs da cadeia de certificados e associa o pacote de CAs ao conjunto de backend. Observe que não é possível configurar certificados do tipo Importado para serem alternados automaticamente.
- Se você criou o certificado emitindo o certificado internamente de uma CA do serviço Certificates, o certificado será do tipo Emitido por CA interna. O controlador de entrada nativo do OCI associa o certificado ao listener, obtém o OCID da CA e associa esse OCID ao conjunto de backend. Observe que você pode configurar certificados do tipo Emitido por CA interna para serem alternados automaticamente.
Quando o listener que atende na porta 443 recebe uma solicitação HTTPS para o host especificado, o listener usa o certificado para encerramento de TLS. Em seguida, o listener usa a regra de roteamento para encaminhar a solicitação ao conjunto de backend. O conjunto de backend cria uma nova conexão TLS com os backends em execução no cluster (usando o pacote de CAs ou a CA identificada por seu OCID, como a autoridade confiável para a nova conexão).
Agregando Portas do Listener HTTP/HTTPS
Ao usar o controlador de entrada nativo do OCI (como um programa independente ou como complemento de cluster), você pode agregar todo o tráfego HTTP em uma única porta de listener e, da mesma forma, pode agregar todo o tráfego HTTPS em uma única porta.
Por padrão, o controlador de entrada nativo do OCI cria um listener do balanceador de carga do OCI para cada porta de serviço de backend definida em um manifesto Ingress
. O controlador de entrada nativo do OCI também cria uma política de roteamento para cada porta do listener. No entanto, você pode usar a anotação oci-native-ingress.oraclecloud.com/http-listener-port
e/ou a anotação oci-native-ingress.oraclecloud.com/https-listener-port
para criar um único listener e uma política de roteamento para todas as solicitações HTTP e/ou um único listener e uma política de roteamento para todas as solicitações HTTPS.
Por exemplo, você pode definir uma entrada com regras para quatro serviços de backend, cada serviço atendendo em uma porta diferente, da seguinte forma:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: sample-ingress
spec:
tls:
- hosts:
- "foo.bar.com3"
- "foo.bar.com4"
secretName: secret_name
rules:
- host: "foo.bar.com1"
http:
paths:
- pathType: Prefix
path: "/testecho1"
backend:
service:
name: testecho1
port:
number: 80
- host: "foo.bar.com2"
http:
paths:
- pathType: Prefix
path: "/testecho2"
backend:
service:
name: testecho2
port:
number: 81
- host: "foo.bar.com3"
http:
paths:
- pathType: Prefix
path: "/testecho3"
backend:
service:
name: testecho3
port:
number: 443
- host: "foo.bar.com4"
http:
paths:
- pathType: Prefix
path: "/testecho4"
backend:
service:
name: testecho4
port:
number: 444
Neste exemplo, o manifesto Ingress
define quatro serviços:
- testecho1, fazendo listening na porta 80 para tráfego HTTP
- testecho2, fazendo listening na porta 81 para tráfego HTTP
- testecho3, fazendo listening na porta 443 para tráfego HTTPS
- testecho4, fazendo listening na porta 444 para tráfego HTTPS
Por padrão, o controlador de entrada nativo do OCI cria:
- Quatro listeners no balanceador de carga (dois listeners com listener nas portas 80 e 81 para tráfego HTTP e dois listeners com listener nas portas 443 e 444 para tráfego HTTPS).
- Quatro políticas de roteamento (uma para cada porta do listener).
Para simplificar a administração, você pode decidir ter um único listener atendendo ao tráfego HTTP e um único listener atendendo ao tráfego HTTPS, definindo anotações da seguinte forma:
oci-native-ingress.oraclecloud.com/http-listener-port: "100"
oci-native-ingress.oraclecloud.com/https-listener-port: "500"
Com as anotações definidas conforme mostrado, o controlador de entrada nativo do OCI cria:
- um único listener que está escutando tráfego HTTP na porta 100 e uma única política de roteamento para a porta 100 com caminhos para backends nas portas testecho1:80 e testecho2:81
- um único listener que faz listening do tráfego HTTPS na porta 500 e uma única política de roteamento para a porta 500 com caminhos para backends nas portas testecho3:443 e testecho4:444
Observe o seguinte:
-
Você pode definir as anotações
oci-native-ingress.oraclecloud.com/http-listener-port
eoci-native-ingress.oraclecloud.com/https-listener-port
independentemente umas das outras, para que não precise definir as duas anotações. -
Se o manifesto do recurso
Ingress
incluir a anotaçãooci-native-ingress.oraclecloud.com/certificate-ocid
, o controlador de entrada nativo do OCI considerará todos os hosts a serem configurados para TLS. Nesse caso, o controlador de entrada nativo do OCI:- ignora a anotação
oci-native-ingress.oraclecloud.com/http-listener-port
(se presente no manifesto de recursosIngress
) - aplica a anotação
oci-native-ingress.oraclecloud.com/https-listener-port
(se presente no manifesto de recursosIngress
) para criar um único listener para todo o tráfego
- ignora a anotação
- Independentemente das anotações
oci-native-ingress.oraclecloud.com/http-listener-port
eoci-native-ingress.oraclecloud.com/https-listener-port
, o controlador de entrada nativo do OCI só cria listeners HTTP e/ou HTTPS (e políticas de roteamento correspondentes) se necessário para serviços de backend definidos no manifesto de recursos de Entrada. Por exemplo:- Se você incluir a anotação
oci-native-ingress.oraclecloud.com/http-listener-port
em um manifesto de recursosIngress
que não define um backend HTTP, o controlador de entrada nativo do OCI não criará um listener HTTP. - Se você incluir a anotação
oci-native-ingress.oraclecloud.com/https-listener-port
em um manifesto de recursosIngress
que não defina um backend HTTPS, o controlador de entrada nativo do OCI não criará um listener HTTPS. - Se você incluir anotações
oci-native-ingress.oraclecloud.com/http-listener-port
eoci-native-ingress.oraclecloud.com/https-listener-port
em um manifesto de recursosIngress
que só define backends HTTP, o controlador de entrada nativo do OCI ignorará a anotaçãooci-native-ingress.oraclecloud.com/https-listener-port
e não criará um listener HTTPS. - Se você incluir anotações
oci-native-ingress.oraclecloud.com/http-listener-port
eoci-native-ingress.oraclecloud.com/https-listener-port
em um manifesto de recursosIngress
que defina apenas backends HTTPS, o controlador de entrada nativo do OCI ignorará a anotaçãooci-native-ingress.oraclecloud.com/http-listener-port
e não criará um listener HTTP.
- Se você incluir a anotação