Yon ti leson patikilye sou kijan pou itilize Keycloak pou konekte Kubernetes ak sèvè LDAP ou a epi mete kanpe enpòte itilizatè yo ak gwoup yo. Sa a pral pèmèt ou mete kanpe RBAC pou itilizatè ou yo epi sèvi ak auth-proxy pou pwoteje Kubernetes Dashboard ak lòt aplikasyon ki pa konnen ki jan yo otorize tèt yo.
Enstalasyon Keycloak
Ann sipoze ke ou deja gen yon sèvè LDAP. Li ta ka Active Directory, FreeIPA, OpenLDAP oswa kèlkeswa sa. Si ou pa gen yon sèvè LDAP, Lè sa a, nan prensip ou ka kreye itilizatè dirèkteman nan koòdone Keycloak la, oswa itilize founisè oidc piblik (Google, Github, Gitlab), rezilta a pral prèske menm.
Premye a tout, se pou yo enstale Keycloak tèt li, enstalasyon an ka fèt separeman, oswa dirèkteman nan gwoup Kubernetes la, kòm yon règ, si ou gen plizyè grap Kubernetes, li ta pi fasil enstale li separeman. Nan lòt men an, ou ka toujou itilize
Pou estoke done Keycloak, w ap bezwen yon baz done. Defo a se h2
(tout done yo estoke lokalman), men li posib tou pou itilize postgres
, mysql
oswa mariadb
.
Si ou toujou deside enstale Keycloak separeman, ou ka jwenn enstriksyon plis detay nan
Konfigirasyon federasyon an
Premye a tout, se pou yo kreye yon nouvo domèn. Rwayom se espas aplikasyon nou an. Chak aplikasyon ka gen pwòp domèn li yo ak itilizatè diferan ak anviwònman otorizasyon. Keycloak tèt li itilize domèn mèt la epi sèvi ak li pou nenpòt lòt bagay ki mal.
Pouse Ajoute domèn
opsyon
Valè
Non
kubernetes
Display Non
Kubernetes
HTML Display Non
<img src="https://kubernetes.io/images/nav_logo.svg" width="400" >
Kubernetes pa default tcheke si imel itilizatè a konfime oswa ou pa. Piske n ap itilize pwòp sèvè LDAP nou an, chèk sa a pral prèske toujou retounen false
. Ann enfim reprezantasyon anviwònman sa a nan Kubernetes:
Kliyan dimansyon -> Imèl -> Mapè yo -> imel verifye (Efase)
Koulye a, ann mete kanpe federasyon an, pou sa a nou ale nan:
Federasyon itilizatè -> Ajoute founisè... -> ldap
Men yon egzanp konfigirasyon pou FreeIPA:
opsyon
Valè
Non ekspozisyon konsole
freeipa.example.org
Machann
Red Hat Directory Server
UUID LDAP atribi
ipauniqueid
URL koneksyon
ldaps://freeipa.example.org
Itilizatè DN
cn=users,cn=accounts,dc=example,dc=org
Mare DN
uid=keycloak-svc,cn=users,cn=accounts,dc=example,dc=org
Mare kalifikasyon
<password>
Pèmèt otantifikasyon Kerberos:
on
Rwayom Kerberos:
EXAMPLE.ORG
Direktè sèvè:
HTTP/[email protected]
onglet kle:
/etc/krb5.keytab
Itilizatè keycloak-svc
dwe kreye davans sou sèvè LDAP nou an.
Nan ka a nan Anyè aktif, tou senpleman chwazi Vandè: Anyè aktif epi paramèt ki nesesè yo pral antre nan fòm lan otomatikman.
Pouse Save
Koulye a, ann kontinye:
Federasyon itilizatè -> freeipa.example.org -> Mapè yo -> Nom
opsyon
Valè
Atribi Ldap
givenName
Koulye a, pèmèt kat gwoup:
Federasyon itilizatè -> freeipa.example.org -> Mapè yo -> Kreye
opsyon
Valè
Non
groups
Kalite Mapper
group-ldap-mapper
Gwoup LDAP DN
cn=groups,cn=accounts,dc=example,dc=org
Gwoup itilizatè Rekipere estrateji
GET_GROUPS_FROM_USER_MEMBEROF_ATTRIBUTE
Sa a konplete konfigirasyon federasyon an, ann ale nan mete kanpe kliyan an.
Konfigirasyon kliyan an
Ann kreye yon nouvo kliyan (yon aplikasyon ki pral resevwa itilizatè soti nan Keycloak). Ann ale:
Kliyan -> Kreye
opsyon
Valè
ID kliyan
kubernetes
Kalite Aksè
confidenrial
URL rasin
http://kubernetes.example.org/
URI redireksyon ki valab
http://kubernetes.example.org/*
Admin URL
http://kubernetes.example.org/
Nou pral kreye tou yon dimansyon pou gwoup:
Kliyan dimansyon -> Kreye
opsyon
Valè
modèl
No template
Non
groups
Chemen gwoup konplè
false
Epi mete yon mape pou yo:
Kliyan dimansyon -> gwoup -> Mapè yo -> Kreye
opsyon
Valè
Non
groups
Kalite Mapper
Group membership
Non Reklamasyon Siy
groups
Koulye a, nou bezwen pèmèt kat gwoup nan sijè ki abòde kliyan nou an:
Kliyan -> gouvènè -> Kliyan dimansyon -> Dimansyon Kliyan Default
Chwazi gwoup в Dimansyon Kliyan ki disponibpouse Ajoute chwazi yo
Koulye a, ann mete kanpe otantifikasyon aplikasyon nou an, ale nan:
Kliyan -> gouvènè
opsyon
Valè
Otorizasyon Pèmèt
ON
Ann pouse sove ak sa a konplete konfigirasyon kliyan an, kounye a sou tab la
Kliyan -> gouvènè -> Kredansyèl yo
ou ka jwenn Sekrè ke nou pral itilize pita.
Konfigirasyon Kubernetes
Mete kanpe Kubernetes pou otorizasyon OIDC se byen trivial epi li pa yon bagay trè konplike. Tout sa ou bezwen fè se mete sètifika CA sèvè OIDC ou a nan /etc/kubernetes/pki/oidc-ca.pem
epi ajoute opsyon ki nesesè pou kube-apiserver.
Pou fè sa, mete ajou /etc/kubernetes/manifests/kube-apiserver.yaml
sou tout mèt ou yo:
...
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
...
Epi tou mete ajou konfigirasyon kubeadm nan gwoup la pou yo pa pèdi paramèt sa yo pandan aktyalizasyon a:
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
...
Sa a konplete konfigirasyon Kubernetes la. Ou ka repete etap sa yo atravè tout gwoup Kubernetes ou yo.
Premye Otorizasyon
Apre etap sa yo, ou pral deja gen yon gwoup Kubernetes ak otorizasyon OIDC configuré. Sèl pwen an se ke itilizatè ou yo poko gen yon kliyan configuré, osi byen ke pwòp kubeconfig yo. Pou rezoud pwoblèm sa a, ou bezwen konfigirasyon emisyon otomatik kubeconfig bay itilizatè yo apre otorizasyon siksè.
Pou fè sa, ou ka itilize aplikasyon espesyal entènèt ki pèmèt ou otantifye itilizatè a ak Lè sa a, telechaje kubeconfig la fini. Youn nan pi pratik se
Pou konfigirasyon Kuberos, li ase dekri modèl la pou kubeconfig epi kouri li ak paramèt sa yo:
kuberos https://keycloak.example.org/auth/realms/kubernetes kubernetes /cfg/secret /cfg/template
Pou plis detay gade
Li posib tou pou itilize
Kubeconfig ki kapab lakòz yo ka tcheke sou sit la users[].user.auth-provider.config.id-token
soti nan kubeconfig ou a nan yon fòm sou sit la epi jwenn transkripsyon an touswit.
konfigirasyon RBAC
Lè w ap konfigirasyon RBAC, ou ka fè referans ak non itilizatè a (jaden name
nan siy jwt la) ak pou yon gwoup itilizatè (jaden groups
nan siy jwt). Men yon egzanp tabli otorizasyon pou yon gwoup 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
Ou ka jwenn plis egzanp pou RBAC nan
Mete otorizasyon-proxy
Gen yon bèl pwojè
dashboard-proxy.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
Sous: www.habr.com