Dieser Artikel wurde geschrieben, um ein vorhandenes zu erweitern , behandelt jedoch die Funktionen des Bundles mit Microsoft ActiveDirectory und ergänzt es.In diesem Artikel werde ich Ihnen erklären, wie Sie installieren und konfigurieren:- Keycloak ist ein Open Source Projekt. Dies bietet einen einzigen Einstiegspunkt für Anwendungen. Es funktioniert mit vielen Protokollen, einschließlich LDAP und OpenID, die uns interessieren.
- Keycloak Gatekeeper - Reverse-Proxy-Anwendung, mit der Sie die Autorisierung über Keycloak integrieren können.
- Gangway - die Anwendung, die eine Konfiguration für kubectl generiert, mit der Sie sich anmelden und über OpenID eine Verbindung zur Kubernetes-API herstellen können
Wie Rechte in Kubernetes funktionieren.
Wir können Benutzer- / Gruppenrechte mit RBAC verwalten. Es wurden bereits viele Artikel darüber erstellt. Darauf werde ich nicht näher eingehen. Das Problem ist, dass Sie RBAC verwenden können, um Benutzerrechte einzuschränken, aber Kubernetes weiß nichts über Benutzer. Es stellt sich heraus, dass Sie in Kubernetes einen Benutzerbereitstellungsmechanismus benötigen. Zu diesem Zweck fügen wir Kuberntes einen OpenID-Anbieter hinzu, der besagt, dass ein solcher Benutzer tatsächlich existiert, und Kubernetes selbst wird ihm Rechte einräumen.Ausbildung- Sie benötigen einen Kubernetes-Cluster oder eine Minikube
- Active Directory
- Domänen:
keycloak.example.org
kubernetes-dashboard.example.org
gangway.example.org - Zertifikat für Domains oder selbstsigniertes Zertifikat
Ich werde nicht näher darauf eingehen, wie ein selbstsigniertes Zertifikat erstellt wird. Sie müssen zwei Zertifikate erstellen. Dies ist der Stamm- (Zertifizierungsstelle) und Platzhalter-Client für die Domain * .example.org.Nachdem Sie die Zertifikate erhalten / geschrieben haben, muss der Client dazu zu Kubernetes hinzugefügt werden ein Geheimnis dafür schaffen:kubectl create secret tls tls-keycloak --cert=example.org.crt --key=example.org.pem
Als nächstes werden wir es für unseren Ingress-Controller verwendenInstallieren Sie Keycloak
Ich entschied, dass der einfachste Weg, vorgefertigte Lösungen dafür zu verwenden, nämlich Steuerkarten.Installieren Sie das Repository und aktualisieren Sie es:helm repo add codecentric https://codecentric.imtqy.com/helm-charts
helm repo update
Erstellen Sie die Datei keycloak.yml mit den folgenden Inhalten: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
Föderations-Setup
Wechseln Sie als
Nächstes zur Weboberfläche keycloak.example.org. Klicken Siein der linken Ecke auf Realm hinzufügenDeaktivieren Sie die Überprüfung der Benutzer-E-Mail-Bestätigung:Client-Bereiche -> E-Mail -> Mapper -> E-Mail überprüft (Löschen) Wirkonfigurieren den Verbund für den Import von Benutzern aus ActiveDirectory. Ich werde unten Screenshots hinterlassen. Ich denke, es wird klarer.Benutzerverband -> Anbieter hinzufügen ... -> ldapWenn alles in Ordnung ist, erhalten Sie nach dem Klicken auf die Schaltfläche Alle Benutzer synchronisieren eine Nachricht über den erfolgreichen Import von Benutzern.Als nächstes müssen wir unsere GruppenBenutzerverbund -> ldap_localhost -> Mapper -> Erstellen zuordnenClient-Setup
Es ist notwendig, einen Kunden zu erstellen, in Bezug auf Keycloak ist eine Anwendung, die von ihm autorisiert wird. Ich werde die wichtigen Punkte im Screenshot rot hervorheben.Kunden -> ErstellenErstellen Sie eine Gruppe für Gruppen:Client-Bereiche -> ErstellenUnd konfigurieren Sie den Mapper für sie:Client-Bereiche -> Gruppen -> Mapper -> ErstellenFügen Sie die Zuordnung unserer Gruppen zu Standardclientbereichen hinzu:Clients -> kubernetes -> Clientbereiche -> StandardclientbereicheWählen Sie Gruppen in Verfügbare Clientbereiche aus , klicken Sie auf Ausgewählte hinzufügen.Wir erhalten ein Geheimnis (und schreiben es in den Thread), das wir für die Autorisierung verwenden in Keycloak:Clients -> kubernetes -> Credentials -> SecretDies ist das Ende des Setups, aber ich habe einen Fehler erhalten, als ich nach einer erfolgreichen Autorisierung einen Fehler 403 erhalten habe . Fehlerbericht .Fix:Client-Bereiche -> Rollen -> Mapper -> ErstellenSkriptcode
token.addAudience(token.getIssuedFor());
token.getIssuer();
Konfigurieren Sie Kubernetes
Wir müssen angeben, wo sich unser Stammzertifikat von der Site befindet und wo sich der OIDC-Anbieter befindet.Bearbeiten Sie dazu die Datei /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
...
Aktualisieren Sie die kubeadm-Konfiguration im Cluster:kubeadm configkubectl 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
...
Konfigurieren Sie den Auth-Proxy
Sie können Keycloak Gatekeeper verwenden, um Ihre Webanwendung zu schützen. Zusätzlich zu der Tatsache, dass dieser Reverse-Proxy den Benutzer vor dem Anzeigen der Seite autorisiert, überträgt er auch Informationen über Sie in den Kopfzeilen an die endgültige Anwendung. Wenn Ihre Anwendung OpenID unterstützt, meldet sich der Benutzer sofort an. Schauen wir uns das Beispiel des Kubernetes Dashboard anInstallieren Sie das Kubernetes Dashboard
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'
Festlegen von Berechtigungen:
Erstellen Sie eine ClusterRoleBinding, die Benutzern in der DataOPS-Gruppe Cluster-Administratorrechte (Standard-ClusterRole-Cluster-Administrator) gewährt.
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
Installieren Sie den 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
values_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"
Wenn Sie danach versuchen, zu kubernetes-dashboard.example.org zu wechseln , werden Sie zu Keycloak weitergeleitet. Wenn die Autorisierung erfolgreich ist, sind wir bereits bei Dashboard angemeldet.Gangway-Installation
Der Einfachheit halber können Sie eine Gangway hinzufügen, die eine Konfigurationsdatei für kubectl generiert, mit der wir bereits unter unserem Benutzer in Kubernetes gelangen.
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-----
Es sieht ungefähr so aus. Ermöglicht das sofortige Herunterladen der Konfigurationsdatei und deren Erstellung mit einer Reihe von Befehlen: