Kubernetes
De acordo com a documentação do Kubernetes, o Servidor API do Kubernetes pode ser autenticado usando OpenID Connect (OIDC). Este artigo irá guiá-lo sobre como configurar a autenticação no Kubernetes usando o Casdoor.
Requisitos de Ambiente
Antes de começar, por favor, certifique-se de que você tem o seguinte ambiente:
- Um cluster Kubernetes.
- Uma aplicação Casdoor como este site de demonstração.
- ferramenta de comando kubectl (opcional).
O oidc-issuer-url
do Kubernetes só aceita URLs que usam o prefixo https://
. Então, sua aplicação Casdoor deve ser implantada em um site HTTPS.
Passo 1: Criando um App Casdoor e Conta de Usuário para Autenticação
Vá até a sua aplicação Casdoor e adicione uma nova aplicação chamada Kubernetes. Lembre-se do Name
, Organization
, client ID
, client Secret
, e adicione alguns tipos de concessão a este app.
A seguir, adicione um novo usuário à aplicação que você acabou de criar. Por favor, note que a Organization
e o Signup application
usados aqui devem corresponder ao app registrado anteriormente.
Passo 2: Configurar o Servidor API do Kubernetes com Autenticação OIDC
Para habilitar o plugin OIDC, você precisa configurar as seguintes flags no servidor API:
--oidc-issuer-url
: URL do provedor que permite ao servidor API descobrir chaves de assinatura públicas.--oidc-client-id
: Um id de cliente para o qual todos os tokens devem ser emitidos.
Este artigo usa minikube para demonstração. Você pode configurar o plugin OIDC para o servidor API do minikube usando o seguinte comando na inicialização:
minikube start --extra-config=apiserver.oidc-issuer-url=https://demo.casdoor.com --extra-config=apiserver.oidc-client-id=294b09fbc17f95daf2fe
Passo 3: Testar Autenticação OIDC
Obter Informações de Autenticação
Devido à falta de uma interface frontend no kubectl, a autenticação pode ser realizada enviando uma solicitação POST para o servidor Casdoor. Aqui está o código em Python que envia uma solicitação POST para o servidor Casdoor e recupera o id_token
e o refresh_token
:
import requests
import json
url = "https://demo.casdoor.com/api/login/oauth/access_token"
payload = json.dumps({
"grant_type": "password",
"client_id": "Kubernetes",
"client_secret": "72c65c3912aec24a9f3ec41b65a7577114ed2bae",
"username": "user_3u94sf",
"password": "123456"
})
response = requests.request("POST", url, data=payload)
print(response.text)
Após executar este código, você deve receber uma resposta semelhante à seguinte:
{
"access_token": "xxx",
"id_token": "yyy",
"refresh_token": "zzz",
"token_type": "Bearer",
"expires_in": 72000,
"scope": ""
}
Agora, você pode usar o id_token
que acabou de obter para se autenticar com o servidor API do Kubernetes.
Autenticação Baseada em Requisição HTTP
Adicione o token ao cabeçalho da requisição.
curl https://www.xxx.com -k -H "Authorization: Bearer $(id_token)"
https://www.xxx.com
é o endereço de implantação do servidor API do Kubernetes.
Autenticação Baseada no Cliente Kubectl
Método de Arquivo de Configuração
Escreva a seguinte configuração no arquivo ~/.kube/config
. Você deve substituir cada item de configuração no arquivo de configuração acima com os valores que obteve anteriormente.
users:
- name: minikube
user:
auth-provider:
config:
client-id: Kubernetes
client-secret: 72c65c3912aec24a9f3ec41b65a7577114ed2bae
id-token: $(id_token)
idp-issuer-url: https://demo.casdoor.com
refresh-token: $(refresh_token)
name: oidc
Agora, você pode acessar diretamente o seu servidor API usando kubectl. Tente executar um comando de teste.
kubectl cluster-info
Método de Argumento de Linha de Comando
Alternativamente, você pode se autenticar adicionando diretamente o id_token
aos parâmetros de linha de comando do kubectl.
kubectl --token=$(id_token) cluster-info