Instalando o Keycloak no Kubernetes e Nginx

O Keycloak é uma plataforma Open Source para gerenciamento de segurança nas aplicações com suporte aos protocolos padrões OpenID Connect, OAuth 2.0, SAML 2.0. Para comparar com ferramentas similares você pode consultar o Auth0, Amazon Cognito, Azure Active Directory e muitas outras soluções que cuidam da segurança das suas aplicações, API’s e Microservices.

No meu cenário estou utilizando um cluster de Kubernetes criado no Azure Kubernetes Service (AKS). Portanto é necessário que já o cluster criado e as ferramentas Kubectl e Helm instaladas em seu ambiente.

Para publicar o Keycloak nós utilizaremos o pacote Helm montado pela Bitnami. Para realizar o deployment padrão basta seguir os passos abaixo:

1) Adicione uma referência no helm
helm repo add bitnami https://charts.bitnami.com/bitnami
2) Execute o update do helm
helm repo update
3) Execute a instalação do pacote
helm install keycloak bitnami/keycloak


Após executar já pode acompanhar o resultado listando os pods e visualizar o Keycloak e o PostgreSQL.
Execute:
kubectl get pods

Durante a utilização do Helm é possível passar parâmetros ao Keycloak para definir por exemplo um banco de dados externo e outras configurações e o parâmetro para suporte ao nginx.

Um exemplo onde estamos adicionando uma segunda replica
helm upgrade keycloak bitnami/keycloak –replicaCount=2

Nesse exemplo publicaremos o keycloak e definindo uma senha admin além o proxyAddressForwarding, pois utilizarei o ingress do nginx por meio de acesso ao meu cluster e keycloak precisar dessa configuração para
funcionar corretamente.

helm install keycloak bitnami/keycloak –set proxyAddressForwarding=true –set auth.adminPassword=1s9oCass@@#

A configuração padrão do helm keycloak da bitnami cria um service no kubernetes e vincula um ip externo
Execute: kubectl get svc

A configuração padrão também cria um PersistentVolumeClaim (PVC) para o PostgreSQL
Execute: kubectl get pvc

Endereço padrão interno criado no dns do cluster para configurar nas aplicações
keycloak.default.svc.cluster.local

Ao criar uma entrada no ingress por exemplo para a url “id.devprime.tech” basta
adicionar a referência para o service “keycloak” na configuração.

Uma forma rápida de visualizar o keycloak instalado é mapear a porta
kubectl port-forward service/keycloak 80:80
Depois abra em http://localhost

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: ingress-keycloak-v1
  annotations:
    cert-manager.io/cluster-issuer: letsencrypt-prod
    nginx.ingress.kubernetes.io/rewrite-target: /
    kubernetes.io/ingress.class: nginx
    nginx.ingress.kubernetes.io/proxy-buffer-size: "128k"    
spec:
  tls:
  - hosts:
      - auth.devprime.tech 
    secretName: secret-ssl-keycloak
  rules:
  - host: "auth.devprime.tech"
    http:
      paths:
      - pathType: Prefix
        path: "/"
        backend:
          service:
            name: keycloak
            port:
              number: 80

Informações importantes:
1) Se vai usar o keycloak pelo nginx utilize “proxyAddressForwarding=true”
2) Se vai reinstalar e não tem a senha delete o pvc
3) A minha primeira opção é utilizar um banco de dados externos gerenciado pelo Cloud
4) Adicione case utilize nginx o proxy-buffer-size na configuração do seu portal, pois ele recebe o redirect
5) Para excluir o pacote helm delete keycloak e apage também o PersistentVolumeClaim (PVC) relacionado

Para saber mais:
Keycloak
A deep dive into Keycloak
502 Error from Ingress in Keycloak response
Module ngx_http_proxy_module
Advanced Configuration with Annotations

Gostaria de ajuda na estratégia de software e modernização de aplicações? Faça contato e conheça o nosso produto DevPrime.

[],
Ramon Durães