Autenticar no Kubernetes usando GitHub OAuth e Dex
Apresento a vocês um tutorial para gerar acesso a um cluster Kubernetes usando Dex, dex-k8s-authenticator e GitHub.
Meme local do bate-papo do Kubernetes em russo em Telegram
Introdução
Usamos Kubernetes para criar ambientes dinâmicos para a equipe de desenvolvimento e QA. Portanto, queremos dar a eles acesso ao cluster tanto para o painel quanto para o kubectl. Ao contrário do OpenShift, o Vanilla Kubernetes não possui autenticação nativa, portanto, usamos ferramentas de terceiros para isso.
GitHub - simplesmente porque usamos GitHub em nossa empresa
Tentamos usar o Google OIDC, mas infelizmente não conseguimos fracassado para iniciá-los com grupos, então a integração com o GitHub nos serviu muito bem. Sem mapeamento de grupos, não será possível criar políticas RBAC baseadas em grupos.
Então, como funciona nosso processo de autorização do Kubernetes em uma representação visual:
Processo de autorização
Um pouco mais de detalhes e ponto por ponto:
O usuário faz login no dex-k8s-authenticator (login.k8s.example.com)
dex-k8s-authenticator encaminha a solicitação para Dex (dex.k8s.example.com)
Dex redireciona para a página de login do GitHub
GitHub gera as informações de autorização necessárias e as retorna ao Dex
Dex passa as informações recebidas para dex-k8s-authenticator
O usuário recebe um token OIDC do GitHub
dex-k8s-authenticator adiciona token ao kubeconfig
kubectl passa o token para KubeAPIServer
KubeAPIServer retorna acessos ao kubectl com base no token passado
O usuário obtém acesso do kubectl
Ações preparatórias
Claro, já temos um cluster Kubernetes instalado (k8s.example.com) e também vem com o HELM pré-instalado. Também temos uma organização no GitHub (super-org).
Se você não possui o HELM, instale-o muito simples.
Primeiro precisamos configurar o GitHub.
Vá para a página de configurações da organização, (https://github.com/organizations/super-org/settings/applications) e crie um novo aplicativo (aplicativo OAuth autorizado):
Criando um novo aplicativo no GitHub
Preencha os campos com as URLs necessárias, por exemplo:
URL da Página incial: https://dex.k8s.example.com
URL de retorno de chamada de autorização: https://dex.k8s.example.com/callback
Cuidado com os links, é importante não perder as barras.
Em resposta a um formulário preenchido, o GitHub irá gerar Client ID и Client secret, guarde-os em um local seguro, eles serão úteis para nós (por exemplo, usamos Cofre para armazenar segredos):
Vá para a página de login (https://login.k8s.example.com) e faça login usando sua conta GitHub:
Página de login
Página de login redirecionada para GitHub
Siga as instruções geradas para obter acesso
Depois de copiar e colar da página da web, podemos usar kubectl para gerenciar nossos recursos de cluster:
kubectl get po
NAME READY STATUS RESTARTS AGE
mypod 1/1 Running 0 3d
kubectl delete po mypod
Error from server (Forbidden): pods "mypod" is forbidden: User "[email protected]" cannot delete pods in the namespace "default"
E funciona, todos os usuários do GitHub em nossa organização podem ver os recursos e fazer login nos pods, mas não têm direitos para alterá-los.