Este art铆culo fue escrito para expandir uno existente , pero habla sobre las caracter铆sticas del paquete con Microsoft ActiveDirectory y lo complementa.En este art铆culo te dir茅 c贸mo instalar y configurar:- Keycloak es un proyecto de c贸digo abierto. Que proporciona un 煤nico punto de entrada para las aplicaciones. Funciona con muchos protocolos, incluidos LDAP y OpenID que nos interesan.
- Keycloak gatekeeper : aplicaci贸n de proxy inverso que le permite integrar la autorizaci贸n a trav茅s de Keycloak.
- Pasarela : la aplicaci贸n que genera una configuraci贸n para kubectl con la que puede iniciar sesi贸n y conectarse a la API de Kubernetes a trav茅s de OpenID
C贸mo funcionan los derechos en Kubernetes.
Podemos administrar los derechos de usuario / grupo usando RBAC, ya se han creado muchos art铆culos sobre esto, no me detendr茅 en esto en detalle. El problema es que puede usar RBAC para restringir los derechos de los usuarios, pero Kubernetes no sabe nada sobre los usuarios. Resulta que necesita un mecanismo de entrega de usuarios en Kubernetes. Para hacer esto, agregaremos un proveedor de OpenID a Kuberntes, que dir谩 que tal usuario realmente existe, y Kubernetes mismo le otorgar谩 derechos.Formaci贸n- Necesitar谩 un cl煤ster Kubernetes o un minikube
- Directorio Activo
- Dominios:
keycloak.example.org
kubernetes-dashboard.example.org
gangway.example.org - Certificado para dominios o certificado autofirmado
No me detendr茅 en c贸mo crear un certificado autofirmado, debe crear 2 certificados, esta es la ra铆z (Autoridad de certificaci贸n) y el cliente comod铆n para el dominio * .example.orgDespu茅s de recibir / escribir los certificados, el cliente debe agregarse a Kubernetes, para esto crea un secreto para ello:kubectl create secret tls tls-keycloak --cert=example.org.crt --key=example.org.pem
Luego lo usaremos para nuestro controlador de IngressInstalar Keycloak
Decid铆 que la forma m谩s f谩cil de usar soluciones preparadas para esto, es decir, gr谩ficos de tim贸n.Instale el repositorio y actual铆celo:helm repo add codecentric https://codecentric.imtqy.com/helm-charts
helm repo update
Cree el archivo keycloak.yml con los siguientes contenidos:keycloak.ymlkeycloak:
#
username: "test_admin"
#
password: "admin"
# Keycloak web .
, .
extraArgs: "-Dkeycloak.profile.feature.script=enabled -Dkeycloak.profile.feature.upload_scripts=enabled"
# ingress, secrets
ingress:
enabled: true
path: /
annotations:
kubernetes.io/ingress.class: nginx
ingress.kubernetes.io/affinity: cookie
hosts:
- keycloak.example.org
tls:
- hosts:
- keycloak.example.org
secretName: tls-keycloak
# Keycloak , Postgresql Kuberntes, !
persistence:
deployPostgres: true
dbVendor: postgres
postgresql:
postgresUser: keycloak
postgresPassword: ""
postgresDatabase: keycloak
persistence:
enabled: true
Configuraci贸n de federaci贸n
A continuaci贸n, vaya a la interfaz web keycloak.example.orgEn la esquina izquierda, haga clic en Agregar reinoDesactivamos la verificaci贸n de la confirmaci贸n por correo electr贸nico del usuario:脕mbitos del cliente -> Correo electr贸nico -> Mapeadores -> Correo electr贸nico verificado (Eliminar)Configuramos la federaci贸n para importar usuarios desde ActiveDirectory, dejar茅 las capturas de pantalla a continuaci贸n, creo que ser谩 m谩s claro.Federaci贸n de usuarios -> Agregar proveedor ... -> ldapConfiguraci贸n de federaci贸n Si todo est谩 bien, luego de hacer clic en el bot贸n Sincronizar todos los usuarios , recibir谩 un mensaje sobre la importaci贸n exitosa de los usuarios.A continuaci贸n, debemos mapear nuestros gruposFederaci贸n de usuarios -> ldap_localhost -> Mapeadores -> CrearConfiguraci贸n del cliente
Es necesario crear un cliente, en t茅rminos de Keycloak es una aplicaci贸n que ser谩 autorizada por 茅l. Destacar茅 los puntos importantes en la captura de pantalla en rojo.Clientes -> CrearConfiguraci贸n del cliente Cree un scoupe para grupos:脕mbitos del cliente -> CrearY configure el mapeador para ellos:脕mbitos del cliente -> grupos -> Mapeadores -> CrearAgregue la asignaci贸n de nuestros grupos a 脕mbitos de cliente predeterminados:Clientes -> kubernetes -> 脕mbitos de cliente -> 脕mbitos de cliente predeterminadosSeleccione grupos en 脕mbitos de cliente disponibles , haga clic en Agregar seleccionadoObtenemos un secreto (y lo escribimos en el hilo) que usaremos para autorizaci贸n en Keycloak:Clientes -> kubernetes -> Credenciales -> SecretoEste es el final de la configuraci贸n, pero recib铆 un error cuando despu茅s de una autorizaci贸n exitosa recib铆 un error 403. Informe de error .Arreglo:脕mbitos del cliente -> roles -> Mapeadores -> CrearC贸digo de script
token.addAudience(token.getIssuedFor());
token.getIssuer();
Configurar Kubernetes
Necesitamos indicar d贸nde se encuentra nuestro certificado ra铆z del sitio y d贸nde se encuentra el proveedor OIDC.Para hacer esto, edite el archivo /etc/kubernetes/manifests/kube-apiserver.yamlkube-apiserver.yaml
...
spec:
containers:
- command:
- kube-apiserver
...
- --oidc-ca-file=/var/lib/minikube/certs/My_Root.crt
- --oidc-client-id=kubernetes
- --oidc-groups-claim=groups
- --oidc-issuer-url=https://keycloak.example.org/auth/realms/kubernetes
- --oidc-username-claim=email
...
Actualice la configuraci贸n de kubeadm en el cl煤ster:configuraci贸n de kubeadmkubectl edit -n kube-system configmaps kubeadm-config
...
data:
ClusterConfiguration: |
apiServer:
extraArgs:
oidc-ca-file: /var/lib/minikube/certs/My_Root.crt
oidc-client-id: kubernetes
oidc-groups-claim: groups
oidc-issuer-url: https://keycloak.example.org/auth/realms/kubernetes
oidc-username-claim: email
...
Configurar auth-proxy
Puede usar keycloak gatekeeper para proteger su aplicaci贸n web. Adem谩s del hecho de que este proxy inverso autorizar谩 al usuario antes de mostrar la p谩gina, tambi茅n transmitir谩 informaci贸n sobre usted en los encabezados a la aplicaci贸n final. Por lo tanto, si su aplicaci贸n es compatible con OpenID, el usuario inicia sesi贸n inmediatamente. Veamos el ejemplo del panel de KubernetesInstalar el panel de Kubernetes
helm install stable/kubernetes-dashboard --name dashboard -f values_dashboard.yaml
values_dashboard.yamlenableInsecureLogin: true
service:
externalPort: 80
rbac:
clusterAdminRole: true
create: true
serviceAccount:
create: true
name: 'dashboard-test'
Establecer permisos:
Cree un ClusterRoleBinding que otorgar谩 derechos de administrador de cl煤ster (ClusterRole cluster-admin est谩ndar) para los usuarios del grupo DataOPS.
kubectl apply -f rbac.yaml
rbac.yaml
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: dataops_group
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: cluster-admin
subjects:
- apiGroup: rbac.authorization.k8s.io
kind: Group
name: DataOPS
Instalar keycloak gatekeeper:
helm repo add gabibbo97 https://gabibbo97.imtqy.com/charts/
helm repo update
helm install gabibbo97/keycloak-gatekeeper --version 2.1.0 --name keycloak-gatekeeper -f values_proxy.yaml
valores_proxy.yaml
ingress:
enabled: true
annotations:
kubernetes.io/ingress.class: nginx
path: /
hosts:
- kubernetes-dashboard.example.org
tls:
- secretName: tls-keycloak
hosts:
- kubernetes-dashboard.example.org
discoveryURL: "https://keycloak.example.org/auth/realms/kubernetes"
ClientID: "kubernetes"
ClientSecret: "c6ec03b8-d0b8-4cb6-97a0-03becba1d727"
upstreamURL: "http://dashboard-kubernetes-dashboard.default.svc.cluster.local"
skipOpenidProviderTlsVerify: true
rules:
- "uri=/*|groups=DataOPS"
Despu茅s de eso, cuando intente ir a kubernetes-dashboard.example.org , ser谩 redirigido a Keycloak y, si la autorizaci贸n es exitosa, ya iniciaremos sesi贸n en Dashboard.Instalaci贸n de pasarela
Para mayor comodidad, puede agregar una pasarela que generar谩 un archivo de configuraci贸n para kubectl, con el que ya ingresaremos a Kubernetes bajo nuestro usuario.
helm install --name gangway stable/gangway -f values_gangway.yaml
values_gangway.yaml
gangway:
clusterName: "my-k8s"
authorizeURL: "https://keycloak.example.org/auth/realms/kubernetes/protocol/openid-connect/auth"
tokenURL: "https://keycloak.example.org/auth/realms/kubernetes/protocol/openid-connect/token"
audience: "https://keycloak.example.org/auth/realms/kubernetes/protocol/openid-connect/userinfo"
scopes: ["openid", "profile", "email", "offline_access"]
redirectURL: "https://gangway.example.org/callback"
clientID: "kubernetes"
clientSecret: "c6ec03b8-d0b8-4cb6-97a0-03becba1d727"
usernameClaim: "sub"
apiServerURL: "https://192.168.99.111:8443"
ingress:
enabled: true
annotations:
kubernetes.io/ingress.class: nginx
nginx.ingress.kubernetes.io/proxy-buffer-size: "64k"
path: /
hosts:
- gangway.example.org
tls:
- secretName: tls-keycloak
hosts:
- gangway.example.org
trustedCACert: |-
-----BEGIN CERTIFICATE-----
MIIDVzCCAj+gAwIBAgIBATANBgkqhkiG9w0BAQsFADA1MQswCQYDVQQGEwJVUzEQMA4GA1UEChMHRGF0YU9QUzEUMBIGA1UEAxMLbXkgcm9vdCBrZXkwHhcNMjAwMjE0MDkxODAwWhcNMzAwMjE0MDkxODAwWjA1MQswCQYDVQQGEwJVUzEQMA4GA1UEChMHRGF0YU9QUzEUMBIGA1UEAxMLbXkgcm9vdCBrZXkwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDyP749PqqIRwNSqaK6qr0Zsi03G4PTCUlgaYTPZuMrwUVPK8xX2dWWs9MPRMOdXpgr8aSTZnVfmelIlVz4D7o2vK5rfmAe9GPcK0WbwKwXyhFU0flS9sU/g46ogHFrk03SZxQAeJhMLfEmAJm8LF5HghtGDs3t4uwGsB95o+lqPLiBvxRB8ZS3jSpYpvPgXAuZWKdZUQ3UUZf0X3hGLp7uIcIwJ7i4MduOGaQEO4cePeEJy9aDAO6qV78YmHbyh9kaW+1DL/Sgq8NmTgHGV6UOnAPKHTnMKXl6KkyUz8uLBGIdVhPxrlzG1EzXresJbJenSZ+FZqm3oLqZbw54Yp5hAgMBAAGjcjBwMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFHISTOU/6BQqqnOZj+1xJfxpjiG0MAsGA1UdDwQEAwIBBjARBglghkgBhvhCAQEEBAMCAAcwHgYJYIZIAYb4QgENBBEWD3hjYSBjZXJ0aWZpY2F0ZTANBgkqhkiG9w0BAQsFAAOCAQEAj7HC8ObibwOLT4ZYmISJZwub9lcE0AZ5cWkPW39j/syhdbbqjK/6jy2D3WUEbR+s1Vson5Ov7JhN5In2yfZ/ByDvBnoj7CP8Q/ZMjTJgwN7j0rgmEb3CTZvnDPAz8Ijw3FP0cjxfoZ1Z0V2F44Ry7gtLJWr06+MztXVyto3aIz1/XbMQnXYlzc3c3B5yUQIy44Ce5aLRVsAjmXNqVRmDJ2QPNLicvrhnUJsO0zFWI+zZ2hc4Ge1RotCrjfOc9hQY63jZJ17myCZ6QCD7yzMzAob4vrgmkD4q7tpGrhPY/gDcE+lUNhC7DO3l0oPy2wsnT2TEn87eyWmDiTFG9zWDew==
-----END CERTIFICATE-----
Se ve algo como esto. Le permite descargar inmediatamente el archivo de configuraci贸n y crearlo usando un conjunto de comandos: