Introdução

No Oracle Cloud Infrastructure (OCI), o serviço Kubernetes Engine (OKE) permite provisionar e escalar aplicações com alta disponibilidade, aproveitando Load Balancers integrados e recursos nativos para garantir desempenho, segurança e simplicidade operacional.

Com essa nova integração ao OCI Certificates, agora é possível gerenciar certificados SSL/TLS diretamente no frontend dos serviços do tipo LoadBalancer, trazendo mais simplicidade e segurança para suas aplicações.

Neste artigo, vamos explorar passo a passo como configurar essa funcionalidade, incluindo o uso de certificados gerenciados e rotação automática, eliminando a necessidade de atualizações manuais nos manifests.

O que mudou?

Anteriormente, o gerenciamento de certificados SSL/TLS no OKE era feito utilizando Kubernetes Secrets, onde os certificados e chaves precisavam ser armazenados e atualizados manualmente dentro do cluster. Esse modelo exigia manutenção recorrente, principalmente em cenários de renovação de certificados, além de expor maior complexidade operacional.

Com a nova funcionalidade, o OKE passa a integrar nativamente com o OCI Certificates, permitindo que os certificados sejam gerenciados diretamente na console de OCI. Isso traz melhorias importantes como rotação automática sem downtime, em que o Load Balancer passa a utilizar o novo certificado assim que ele é renovado, sem necessidade de reaplicar manifests. Além disso, há gerenciamento centralizado e maior segurança, já que as chaves privadas não ficam expostas no cluster.

Benefícios da Integração

  • Elimina a necessidade de armazenar certificados em Kubernetes Secrets.
  • Permite rotação automática de certificados sem reaplicação de manifests.
  • Centraliza o gerenciamento de certificados no OCI Certificates.

Pré-requisitos

Para utilizar essa integração com o OCI Certificates, é necessário garantir os seguintes pontos:

Política de IAM: conceder permissão para que o cluster gerencie certificados no compartment.

Allow any-user to manage certificate-authority-family in compartment compartment-name where ALL {request.principal.type = 'cluster'}

OCID do certificado: é necessário possuir o OCID do certificado que será utilizado pelo Load Balancer. O certificado deve estar na mesma região do recurso. Caso seja necessário criar ou importar um certificado para o OCI Certificates, consulte a documentação oficial.

Estado do recurso: o certificado deve estar criado ou importado no OCI Certificates e com status Active.

Arquitetura

A arquitetura utilizada neste exemplo é composta por um Load Balancer público provisionado automaticamente pelo OKE através de um Service do tipo LoadBalancer. O listener HTTPS recebe as conexões externas e utiliza um certificado armazenado no OCI Certificates para realizar a terminação SSL/TLS.

Após a validação da conexão segura, o tráfego é encaminhado para os pods da aplicação executando nos nós do Kubernetes, distribuídos em diferentes Fault Domains para aumentar a disponibilidade da solução.

Configurando SSL/TLS com OCI Certificates no OKE

No exemplo abaixo, utilizamos uma aplicação simples para demonstrar, de forma prática, como expor um serviço no OKE com HTTPS habilitado utilizando o OCI Certificates.

Um Load Balancer da OCI pode suportar múltiplos certificados para diferentes listeners, é necessário utilizar um ConfigMap para mapear as portas dos listeners aos respectivos certificados no OCI Certificates. Ao aplicar esse ConfigMap, o Load Balancer é atualizado automaticamente.

Crie um ConfigMap no mesmo namespace do Service LoadBalancer, definindo o mapeamento onde a chave representa a porta do listener (por exemplo, 443) e o valor é um array JSON contendo o OCID do certificado.

apiVersion: v1
kind: ConfigMap
metadata:
  name: lb-tls-mapping
data:
  "443": "[\"ocid1.certificate.oc1.sa-saopaulo-1...\"]"

Adicione a annotation oci-load-balancer.oraclecloud.com/tls-certificate-map no manifesto do Service LoadBalancer para associá-lo ao ConfigMap criado.

Importante: as annotations tls-certificate-map e oci-load-balancer-tls-secret são mutuamente exclusivas. Caso ambas sejam definidas, o provisionamento do Load Balancer falhará com erro de configuração SSL/TLS.

O exemplo completo da configuração fica assim:

apiVersion: v1
kind: Namespace
metadata:
  name: oci-ssl-demo

---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: helloworld-deployment
  namespace: oci-ssl-demo
spec:
  replicas: 3
  selector:
    matchLabels:
      app: helloworld
  template:
    metadata:
      labels:
        app: helloworld
    spec:
      containers:
      - name: helloworld
        image: gru.ocir.io/grfxxxxxxxxx/helloworld:latest
        ports:
        - containerPort: 80
      imagePullSecrets: 
      - name: ocirsecret

---
apiVersion: v1
kind: Service
metadata:
  name: helloworld-service
  namespace: oci-ssl-demo
  annotations:
    oci.oraclecloud.com/load-balancer-type: "lb"
    service.beta.kubernetes.io/oci-load-balancer-ssl-ports: "443"
    oci-load-balancer.oraclecloud.com/tls-certificate-map: "lb-tls-mapping"
    service.beta.kubernetes.io/oci-load-balancer-shape: "flexible"
    service.beta.kubernetes.io/oci-load-balancer-shape-flex-min: "10"
    service.beta.kubernetes.io/oci-load-balancer-shape-flex-max: "100"
spec:
  selector:
    app: helloworld
  type: LoadBalancer
  ports:
  - name: https
    port: 443
    targetPort: 80

---
apiVersion: v1
kind: ConfigMap
metadata:
  name: lb-tls-mapping
  namespace: oci-ssl-demo
data:
  "443": "[\"ocid1.certificate.oc1.sa-saopaulo-1....\"]"

Após ajustar o manifesto com o OCID do certificado e a imagem da aplicação, aplique a configuração no cluster.

kubectl apply -f helloworld-ssl.yaml

Aguarde a criação dos recursos e valide se o Service e o Load Balancer foram provisionados com sucesso.

kubectl get svc -n oci-ssl-demo
NAME                 TYPE           CLUSTER-IP     EXTERNAL-IP     PORT(S)         AGE
helloworld-service   LoadBalancer   10.96.245.65   147.15.81.160   443:30357/TCP   66m

Após o provisionamento do Load Balancer, é possível visualizar na aba Certificates and Ciphers o certificado SSL/TLS associado ao listener HTTPS configurado pelo Kubernetes.

Para fins de validação, foi criada uma entrada DNS apontando para o endereço IP público do Load Balancer. Em seguida, foi realizado o acesso à aplicação através do navegador utilizando HTTPS.

Esse resultado confirma que o Load Balancer está utilizando o certificado gerenciado no OCI Certificates e encaminhando o tráfego corretamente para a aplicação no OKE.

Considerações Finais

A integração entre o OKE e o OCI Certificates simplifica significativamente o gerenciamento de certificados SSL/TLS para aplicações expostas através de Load Balancers.

Além de reduzir a complexidade operacional, a solução elimina a necessidade de armazenar certificados em Kubernetes Secrets e permite aproveitar recursos nativos da OCI, como gerenciamento centralizado e rotação automática de certificados sem indisponibilidade.

Com poucas alterações nos manifests Kubernetes, é possível modernizar a estratégia de gerenciamento de certificados e aumentar a segurança das aplicações executadas no Oracle Kubernetes Engine.