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
- Preservando o Balanceador de Carga Após a Exclusão de IngressClass
- Aplicando Tags ao Balanceador de Carga
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, o controlador de entrada nativo do OCI gerenciará o balanceador de carga e atualizará suas propriedades conforme necessário para se alinhar aos valores nos manifestos de recursos IngressClassParameters, IngressClass e Entrada. |
IngressClass |
oci-native-ingress.oraclecloud.com/id: ocid1.loadbalancer.oc1.iad.aaaaaaaan___u7a |
oci-native-ingress.oraclecloud.com/defined-tags |
Uma ou mais tags definidas a serem aplicadas ao balanceador de carga, no formato JSON. | IngressClass |
oci-native-ingress.oraclecloud.com/defined-tags: '{"tag-namespace-1": {"key1": "value1", "key2": "value2"}, "tag-namespace-2": {"key1": "value1"}}' |
oci-native-ingress.oraclecloud.com/freeform-tags |
Uma ou mais tags de formato livre a serem aplicadas ao balanceador de carga, no formato JSON. Consulte Aplicando tags de formato livre ao balanceador de carga. |
IngressClass |
oci-native-ingress.oraclecloud.com/freeform-tags: '{"key1": "value1", "key2": "value2"}' |
oci-native-ingress.oraclecloud.com/delete-protection-enabled: "true" |
Se o balanceador de carga deverá ser preservado se o IngressClass for excluído. Se definido como Consulte Preservando o Balanceador de Carga Após a Exclusão de IngressClass. |
IngressClass |
oci-native-ingress.oraclecloud.com/delete-protection-enabled: "true" |
oci-native-ingress.oraclecloud.com/network-security-group-ids |
Um ou mais OCIDs de grupos de segurança de rede (NSGs) aos quais adicionar o balanceador de carga, em uma lista delimitada por vírgulas. Se não for especificado, o balanceador de carga não será adicionado a nenhum NSGs. | IngressClass |
oci-native-ingress.oraclecloud.com/network-security-group-ids: 'ocid1.networksecuritygroup.oc1.iad.agx___kby, ocid1.networksecuritygroup.oc1.iad.ahr___mlo' |
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
(a menos que você tenha definidooci-native-ingress.oraclecloud.com/delete-protection-enabled: "true"
). 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
, os certificados que o controlador de entrada nativo do OCI obtém do serviço Certificates serão do tipo Importado e, portanto, não serão alternados automaticamente. No entanto, você pode renovar manualmente o certificado obtido do serviço Certificates alterando os detalhes do certificado do servidor atual especificado no segredo existente do Kubernetes. Quando você altera os detalhes do certificado do servidor, o controlador de entrada nativo do OCI atualiza os detalhes correspondentes do certificado obtido do serviço Certificates.Observe que a alteração de informações de assunto no certificado do servidor atual (Nome Comum, Nome da Organização, Nomes Alternativos de Assunto) não é suportada pelo serviço Certificados. Se você quiser alterar as informações do assunto, exclua o segredo original do Kubernetes e crie um novo segredo com o mesmo nome. O controlador de entrada nativo do OCI obtém um novo certificado do tipo Importado e um novo 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
Preservando o Balanceador de Carga Após a Exclusão de IngressClass
Você pode especificar que deseja que o controlador de entrada nativo do OCI preserve o balanceador de carga para um recurso IngressClass
se você excluir o próprio IngressClass
.
Você usa a anotação oci-native-ingress.oraclecloud.com/delete-protection-enabled
no manifesto IngressClass
para especificar se o balanceador de carga será excluído. Defina a anotação como true
para preservar o balanceador de carga se você excluir o IngressClass
. Defina a anotação como false
(ou não inclua a anotação no manifesto) para excluir o balanceador de carga se você excluir o IngressClass
. Por exemplo:
apiVersion: networking.k8s.io/v1
kind: IngressClass
metadata:
name: <ic-name>
annotations:
oci-native-ingress.oraclecloud.com/delete-protection-enabled: "true"
spec:
...
Se você excluir um recurso IngressClass
e usar a anotação para preservar o balanceador de carga, o controlador de entrada nativo do OCI manterá o próprio balanceador de carga, mas limpará as associações com outros recursos de suporte (como grupos de segurança de rede, tags, um firewall de aplicativo web). O controlador de entrada nativo do OCI também exclui o conjunto de backend default_ingress BackendSet
que ele criou.
No entanto, observe que o controlador de entrada nativo do OCI não exclui recursos do balanceador de carga do OCI (listeners, conjuntos de backend) que ele criou para recursos Ingress
que atualmente fazem referência ao IngressClass
excluído. Portanto, antes de excluir um recurso IngressClass
, primeiro exclua qualquer recurso Ingress
que faça referência a IngressClass
em seu manifesto. Se você não excluir esses recursos Ingress
primeiro, os recursos do OCI criados para eles continuarão a existir no balanceador de carga.
Aplicando Tags ao Balanceador de Carga
Você pode especificar que deseja que o controlador de entrada nativo do OCI aplique tags definidas e tags de formato livre a um balanceador de carga que ele cria (para um recurso IngressClass
) ou gerencia (se especificado pela anotação oci-native-ingress.oraclecloud.com/id
). O serviço Tagging permite que você agrupe recursos diferentes entre compartimentos e também permite anotar recursos com seus próprios metadados. Para obter mais informações sobre tags, consulte Marcando com Tags Recursos Relacionados ao Cluster do Kubernetes.
Aplicando tags definidas ao balanceador de carga
As tags definidas são configuradas e gerenciadas por um administrador de tags. Uma tag definida consiste em um namespace de tag, uma chave e um valor. O namespace de tag e a definição de chave de tag devem ser configurados em uma tenancy para que você possa aplicar uma tag definida a um recurso.
Para especificar que o controlador de entrada nativo do OCI deve aplicar tags definidas ao balanceador de carga, use a anotação oci-native-ingress.oraclecloud.com/defined-tags
no manifesto IngressClass
, no seguinte formato:
apiVersion: networking.k8s.io/v1
kind: IngressClass
metadata:
name: <ic-name>
annotations:
oci-native-ingress.oraclecloud.com/defined-tags: '{"<tag-namespace>": {"<tag-key>": "<tag-value>"}}'
spec:
...
em que:
<tag-namespace>
é o namespace de tag ao qual a tag pertence.<tag-key>
é o nome de uma tag definida a ser aplicada ao balanceador de carga.<tag-value>
é um valor para a tag de uma lista predefinida de valores, ou um novo valor, ou está em branco (dependendo de como a tag definida foi configurada).
O valor da anotação oci-native-ingress.oraclecloud.com/defined-tags
é uma string JSON, permitindo que você especifique vários namespaces de tag, chaves de tag e valores de tag no formato JSON.
Por exemplo:
apiVersion: networking.k8s.io/v1
kind: IngressClass
metadata:
name: my-ingress-class
annotations:
oci-native-ingress.oraclecloud.com/defined-tags: '{"Operations": {"CostCenter": "42", "Department": "001"}, "Sales": {"Region": "US"}}'
spec:
...
A alteração de uma das tags na anotação oci-native-ingress.oraclecloud.com/defined-tags
do manifesto IngressClass
faz com que o controlador de entrada nativo do OCI se aplique novamente ao balanceador de carga todas as tags definidas especificadas pela anotação. No entanto, se uma tag definida contiver uma variável de tag, o controlador de entrada nativo do OCI só reaplicará a tag definida ao balanceador de carga se a tag ainda não estiver presente.
Observe que, para permitir que o controlador de entrada nativo do OCI aplique tags definidas a um balanceador de carga, deve existir uma política de IAM adequada para permitir que o controlador de entrada nativo do OCI use o namespace de tag apropriado. Para obter mais informações, consulte:
Aplicando tags de formato livre ao balanceador de carga
As tags de formato livre não são gerenciadas por um administrador de tags. Uma tag de formato livre consiste em uma chave e um valor. Ao contrário das tags definidas, as tags de formato livre não pertencem a um namespace de tag.
Para especificar que o controlador de entrada nativo do OCI deve aplicar tags de formato livre ao balanceador de carga, use a anotação oci-native-ingress.oraclecloud.com/freeform-tags
no manifesto IngressClass
, no seguinte formato:
apiVersion: networking.k8s.io/v1
kind: IngressClass
metadata:
name: <ic-name>
annotations:
oci-native-ingress.oraclecloud.com/freeform-tags: '{"<tag-key>": "<tag-value>"}'
spec:
...
em que:
<tag-key>
é um nome para a tag de formato livre a ser aplicada ao balanceador de carga.<tag-value>
é um valor para a tag de formato livre a ser aplicada ao balanceador de carga.
O valor da anotação oci-native-ingress.oraclecloud.com/freeform-tags
é uma string JSON, permitindo que você especifique várias chaves de tag e valores de tag no formato JSON.
Por exemplo:
apiVersion: networking.k8s.io/v1
kind: IngressClass
metadata:
name: my-ingress-class
annotations:
oci-native-ingress.oraclecloud.com/freeform-tags: '{"Project": "Red", "Version": "Alpha"}'
spec:
...
A alteração de uma das tags na anotação oci-native-ingress.oraclecloud.com/freeform-tags
do manifesto IngressClass
faz com que o controlador de entrada nativo do OCI se aplique novamente ao balanceador de carga todas as tags de formato livre especificadas pela anotação.
Aplicando padrões de tag ao balanceador de carga
Os padrões de tag são configurados para um compartimento específico. Os padrões de tag são específicos do compartimento. Padrões de tag especificam tags definidas que são aplicadas automaticamente a todos os recursos criados em um compartimento específico no momento da criação.
Ao usar o controlador de entrada nativo do OCI versão 1.4.0 (ou posterior), os padrões de tag são aplicados automaticamente aos balanceadores de carga que o controlador de entrada nativo do OCI cria. Posteriormente, o controlador de entrada nativo do OCI mantém um padrão de tag aplicado a um balanceador de carga, a menos que uma das seguintes condições seja atendida:
- Você remove manualmente um padrão de tag que foi aplicado automaticamente a um balanceador de carga.
- Você especifica um padrão de tag como uma tag definida, usando a anotação
oci-native-ingress.oraclecloud.com/defined-tags
(nesse caso, o controlador de entrada nativo do OCI trata o padrão de tag como qualquer outra tag definida).
Observe que os padrões de tag com valores aplicados pelo usuário não são suportados. Se um padrão de tag com um valor aplicado pelo usuário tiver sido configurado para um compartimento no qual o controlador de entrada nativo do OCI deve criar ou gerenciar um balanceador de carga, use a anotação oci-native-ingress.oraclecloud.com/defined-tags
para especificar o padrão de tag como uma tag definida.
Para balanceadores de carga criados usando uma versão do controlador de entrada nativo do OCI anterior à versão 1.4.0 ou ao usar a anotação oci-native-ingress.oraclecloud.com/id
para especificar que o controlador de entrada nativo do OCI deve gerenciar um balanceador de carga existente, observe que os padrões de tag não são suportados. Em ambos os casos, para aplicar ou reter um padrão de tag, use a anotação oci-native-ingress.oraclecloud.com/defined-tags
para especificar o padrão de tag como uma tag definida.