Mafunzo madogo kuhusu jinsi ya kutumia Keycloak kuunganisha Kubernetes kwenye seva yako ya LDAP na kusanidi uingizaji wa watumiaji na vikundi. Hii itakuruhusu kusanidi RBAC kwa watumiaji wako na kutumia auth-proksi kulinda Dashibodi ya Kubernetes na programu zingine ambazo hazijui jinsi ya kujiidhinisha zenyewe.
Ufungaji wa Keycloak
Wacha tuchukue kuwa tayari unayo seva ya LDAP. Inaweza kuwa Active Directory, FreeIPA, OpenLDAP au chochote. Ikiwa huna seva ya LDAP, basi kwa kanuni unaweza kuunda watumiaji moja kwa moja kwenye kiolesura cha Keycloak, au kutumia watoa huduma wa oidc wa umma (Google, Github, Gitlab), matokeo yatakuwa karibu sawa.
Kwanza kabisa, wacha tusakinishe Keycloak yenyewe, usakinishaji unaweza kufanywa kando, au moja kwa moja kwa nguzo ya Kubernetes, kama sheria, ikiwa una vikundi kadhaa vya Kubernetes, itakuwa rahisi kuiweka kando. Kwa upande mwingine, unaweza kutumia kila wakati
Ili kuhifadhi data ya Keycloak, utahitaji hifadhidata. Chaguo msingi ni h2
(data zote zimehifadhiwa ndani), lakini pia inawezekana kutumia postgres
, mysql
au mariadb
.
Ikiwa bado utaamua kusakinisha Keycloak kando, unaweza kupata maagizo ya kina zaidi
Mpangilio wa Shirikisho
Kwanza kabisa, wacha tuunde ulimwengu mpya. Ufalme ndio nafasi ya maombi yetu. Kila programu inaweza kuwa na eneo lake na watumiaji tofauti na mipangilio ya uidhinishaji. Enzi kuu inatumiwa na Keycloak yenyewe na kuitumia kwa kitu kingine chochote sio sawa.
Shinikiza Ongeza eneo
Chaguo
Thamani
jina
kubernetes
Jina Display
Kubernetes
Jina la Onyesho la HTML
<img src="https://kubernetes.io/images/nav_logo.svg" width="400" >
Kubernetes kwa chaguomsingi hukagua ikiwa barua pepe ya mtumiaji imethibitishwa au la. Kwa kuwa tunatumia seva yetu ya LDAP, hundi hii itarudi kila mara false
. Wacha tuzima uwakilishi wa mpangilio huu katika Kubernetes:
Mawanda ya mteja -> Barua pepe -> Wana ramani -> barua pepe imethibitishwa (Futa)
Sasa hebu tuanzishe shirikisho, kwa hili tunaenda kwa:
Shirikisho la watumiaji -> Ongeza mtoa huduma... -> ldap
Hapa kuna mfano wa usanidi wa FreeIPA:
Chaguo
Thamani
Jina la Onyesho la Console
freeipa.example.org
Muuzaji
Red Hat Directory Server
UUID LDAP sifa
ipauniqueid
URL ya muunganisho
ldaps://freeipa.example.org
Mtumiaji DN
cn=users,cn=accounts,dc=example,dc=org
Funga DN
uid=keycloak-svc,cn=users,cn=accounts,dc=example,dc=org
Unganisha Kitambulisho
<password>
Ruhusu uthibitishaji wa Kerberos:
on
Ufalme wa Kerberos:
EXAMPLE.ORG
Mkuu wa Seva:
HTTP/[email protected]
kichupo muhimu:
/etc/krb5.keytab
Mtumiaji keycloak-svc
lazima iundwe mapema kwenye seva yetu ya LDAP.
Katika kesi ya Active Directory, chagua tu Muuzaji: Saraka Inayotumika na mipangilio muhimu itaingizwa kwenye fomu moja kwa moja.
Shinikiza Kuokoa
Sasa tuendelee:
Shirikisho la watumiaji -> freeipa.example.org -> Wana ramani -> Jina la kwanza
Chaguo
Thamani
Ldap sifa
givenName
Sasa wezesha ramani ya kikundi:
Shirikisho la watumiaji -> freeipa.example.org -> Wana ramani -> Kujenga
Chaguo
Thamani
jina
groups
Aina ya ramani
group-ldap-mapper
Vikundi vya LDAP DN
cn=groups,cn=accounts,dc=example,dc=org
Mkakati wa Kurejesha Kikundi cha Mtumiaji
GET_GROUPS_FROM_USER_MEMBEROF_ATTRIBUTE
Hii inakamilisha usanidi wa shirikisho, wacha tuendelee kuweka mteja.
Mpangilio wa mteja
Wacha tuunde mteja mpya (programu ambayo itapokea watumiaji kutoka Keycloak). Twende:
Wateja -> Kujenga
Chaguo
Thamani
Kitambulisho cha Mteja
kubernetes
Aina ya Ufikiaji
confidenrial
URL ya mizizi
http://kubernetes.example.org/
URI halali za Uelekezaji Upya
http://kubernetes.example.org/*
URL ya msimamizi
http://kubernetes.example.org/
Pia tutaunda wigo wa vikundi:
Mawanda ya mteja -> Kujenga
Chaguo
Thamani
Kigezo
No template
jina
groups
Njia kamili ya kikundi
false
Na uwawekee mchora ramani:
Mawanda ya mteja -> makundi -> Wana ramani -> Kujenga
Chaguo
Thamani
jina
groups
Aina ya ramani
Group membership
Jina la Dai la Tokeni
groups
Sasa tunahitaji kuwezesha uchoraji wa kikundi katika wigo wa mteja wetu:
Wateja -> Kubernetes -> Mawanda ya mteja -> Mawanda Chaguomsingi ya Wateja
Kuchagua makundi Π² Mawanda Yanayopatikana ya Wateja, vyombo vya habari Ongeza iliyochaguliwa
Sasa hebu tuweke uthibitishaji wa maombi yetu, nenda kwa:
Wateja -> Kubernetes
Chaguo
Thamani
Uidhinishaji Umewashwa
ON
Hebu sukuma kuokoa na hii inakamilisha usanidi wa mteja, sasa kwenye kichupo
Wateja -> Kubernetes -> Vidokezo
unaweza kupata Siri ambayo tutatumia baadaye.
Inasanidi Kubernetes
Kuanzisha Kubernetes kwa idhini ya OIDC ni jambo dogo na sio jambo gumu sana. Unachohitaji kufanya ni kuweka cheti cha CA cha seva yako ya OIDC ndani /etc/kubernetes/pki/oidc-ca.pem
na ongeza chaguo muhimu kwa kube-apiserver.
Ili kufanya hivyo, sasisha /etc/kubernetes/manifests/kube-apiserver.yaml
juu ya wakuu wako wote:
...
spec:
containers:
- command:
- kube-apiserver
...
- --oidc-ca-file=/etc/kubernetes/pki/oidc-ca.pem
- --oidc-client-id=kubernetes
- --oidc-groups-claim=groups
- --oidc-issuer-url=https://keycloak.example.org/auth/realms/kubernetes
- --oidc-username-claim=email
...
Na pia sasisha usanidi wa kubeadm kwenye nguzo ili usipoteze mipangilio hii wakati wa sasisho:
kubectl edit -n kube-system configmaps kubeadm-config
...
data:
ClusterConfiguration: |
apiServer:
extraArgs:
oidc-ca-file: /etc/kubernetes/pki/oidc-ca.pem
oidc-client-id: kubernetes
oidc-groups-claim: groups
oidc-issuer-url: https://keycloak.example.org/auth/realms/kubernetes
oidc-username-claim: email
...
Hii inakamilisha usanidi wa Kubernetes. Unaweza kurudia hatua hizi kwenye makundi yako yote ya Kubernetes.
Uidhinishaji wa Awali
Baada ya hatua hizi, tayari utakuwa na kundi la Kubernetes ambalo uidhinishaji wa OIDC umesanidiwa. Jambo pekee ni kwamba watumiaji wako bado hawana mteja aliyesanidiwa, pamoja na kubeconfig yao wenyewe. Ili kutatua tatizo hili, unahitaji kusanidi utoaji wa moja kwa moja wa kubeconfig kwa watumiaji baada ya idhini iliyofanikiwa.
Ili kufanya hivyo, unaweza kutumia programu maalum za wavuti zinazokuwezesha kuthibitisha mtumiaji na kisha kupakua kubeconfig iliyokamilishwa. Moja ya rahisi zaidi ni
Ili kusanidi Kuberos, inatosha kuelezea kiolezo cha kubeconfig na kuiendesha na vigezo vifuatavyo:
kuberos https://keycloak.example.org/auth/realms/kubernetes kubernetes /cfg/secret /cfg/template
Kwa maelezo zaidi tazama
Inawezekana pia kutumia
Kubeconfig inayotokana inaweza kuangaliwa kwenye tovuti users[].user.auth-provider.config.id-token
kutoka kwa kubeconfig yako hadi fomu kwenye tovuti na upate nakala mara moja.
Mpangilio wa RBAC
Wakati wa kusanidi RBAC, unaweza kurejelea jina la mtumiaji (uwanja name
kwenye ishara ya jwt) na kwa kikundi cha watumiaji (uwanja groups
katika ishara ya jwt). Hapa kuna mfano wa kuweka ruhusa kwa kikundi kubernetes-default-namespace-admins
:
kubernetes-default-namespace-admins.yaml
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
name: default-admins
namespace: default
rules:
- apiGroups:
- '*'
resources:
- '*'
verbs:
- '*'
---
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
name: kubernetes-default-namespace-admins
namespace: default
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: Role
name: default-admins
subjects:
- apiGroup: rbac.authorization.k8s.io
kind: Group
name: kubernetes-default-namespace-admins
Mifano zaidi ya RBAC inaweza kupatikana katika
Inaweka wakala wa kuthibitisha
Kuna mradi wa ajabu
dashibodi-wakili.yaml
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: kubernetes-dashboard-proxy
spec:
replicas: 1
template:
metadata:
labels:
app: kubernetes-dashboard-proxy
spec:
containers:
- args:
- --listen=0.0.0.0:80
- --discovery-url=https://keycloak.example.org/auth/realms/kubernetes
- --client-id=kubernetes
- --client-secret=<your-client-secret-here>
- --redirection-url=https://kubernetes-dashboard.example.org
- --enable-refresh-tokens=true
- --encryption-key=ooTh6Chei1eefooyovai5ohwienuquoh
- --upstream-url=https://kubernetes-dashboard.kube-system
- --resources=uri=/*
image: keycloak/keycloak-gatekeeper
name: kubernetes-dashboard-proxy
ports:
- containerPort: 80
livenessProbe:
httpGet:
path: /oauth/health
port: 80
initialDelaySeconds: 3
timeoutSeconds: 2
readinessProbe:
httpGet:
path: /oauth/health
port: 80
initialDelaySeconds: 3
timeoutSeconds: 2
---
apiVersion: v1
kind: Service
metadata:
name: kubernetes-dashboard-proxy
spec:
ports:
- port: 80
protocol: TCP
targetPort: 80
selector:
app: kubernetes-dashboard-proxy
type: ClusterIP
Chanzo: mapenzi.com