Usa ka gamay nga panudlo kung giunsa paggamit ang Keycloak aron makonektar ang Kubernetes sa imong LDAP server ug mag-set up sa pag-import sa mga tiggamit ug grupo. Kini magtugot kanimo sa pag-set up sa RBAC alang sa imong mga tiggamit ug paggamit sa auth-proxy aron maprotektahan ang Kubernetes Dashboard ug uban pang mga aplikasyon nga wala mahibalo kon unsaon pagtugot sa ilang kaugalingon.
Pag-instalar sa Keycloak
Ibutang nato nga aduna ka nay LDAP server. Mahimo kini nga Active Directory, FreeIPA, OpenLDAP, o bisan unsa. Kung wala kay LDAP server, nan sa prinsipyo makahimo ka og mga user direkta sa Keycloak interface, o mogamit sa mga public oidc providers (Google, Github, Gitlab), ang resulta halos pareho ra.
Una sa tanan, atong i-install ang Keycloak mismo, ang pag-instalar mahimo nga gilain, o direkta sa Kubernetes cluster, isip usa ka lagda, kung ikaw adunay daghang mga Kubernetes clusters, mas sayon ββββang pag-instalar niini nga gilain. Sa laing bahin, mahimo nimong gamiton kanunay
Aron matipigan ang datos sa Keycloak, magkinahanglan ka og database. Ang default mao ang h2
(ang tanan nga datos gitipigan sa lokal), apan posible usab nga gamiton postgres
, mysql
o mariadb
.
Kung magdesisyon ka pa nga i-install ang Keycloak nga gilain, makit-an nimo ang mas detalyado nga mga panudlo sa
Pag-setup sa Federation
Una sa tanan, maghimo kita ug bag-ong gingharian. Ang gingharian mao ang wanang sa among aplikasyon. Ang matag aplikasyon mahimong adunay kaugalingon nga gingharian nga adunay lainlaing mga tiggamit ug mga setting sa pagtugot. Ang master nga gingharian gigamit sa Keycloak mismo ug ang paggamit niini alang sa bisan unsang butang nga sayup.
I-klik dinhi Idugang ang gingharian
Option
bili
ngalan
kubernetes
Ipakita ang Ngalan
Kubernetes
HTML Display Ngalan
<img src="https://kubernetes.io/images/nav_logo.svg" width="400" >
Ang Kubernetes pinaagi sa default nagsusi kung ang email sa user nakumpirma o dili. Tungod kay naggamit kami sa among kaugalingon nga LDAP server, kini nga tseke hapit kanunay mobalik false
. Atong i-disable ang representasyon niini nga setting sa Kubernetes:
Mga sakup sa kliyente -> Email -> Mga Mapper -> email napamatud-an (Paphaa)
Karon atong ibutang ang pederasyon, alang niini moadto kita sa:
User federation -> Idugang ang provider⦠-> ldap
Ania ang usa ka pananglitan nga pag-setup alang sa FreeIPA:
Option
bili
Ngalan sa Display Console
freeipa.example.org
Vendor
Red Hat Directory Server
UUID LDAP attribute
ipauniqueid
URL sa koneksyon
ldaps://freeipa.example.org
User DN
cn=users,cn=accounts,dc=example,dc=org
Ibugkos ang DN
uid=keycloak-svc,cn=users,cn=accounts,dc=example,dc=org
Bind Credential
<password>
Tugoti ang Kerberos authentication:
on
Kerberos Realm:
EXAMPLE.ORG
Prinsipal sa Server:
HTTP/[email protected]
yawe tab:
/etc/krb5.keytab
Gigamit keycloak-svc
kinahanglang himoon daan sa among LDAP server.
Sa kaso sa Active Directory, pilia lang Vendor: Aktibo nga Direktoryo ug ang gikinahanglan nga mga setting awtomatikong isulod sa porma.
I-klik dinhi Luwasa
Karon magpadayon kita:
User federation -> freeipa.example.org -> Mga Mapper -> unang Ngalan
Option
bili
Ldap nga mga hiyas
givenName
Karon mahimo ang pagmapa sa grupo:
User federation -> freeipa.example.org -> Mga Mapper -> Paghimo
Option
bili
ngalan
groups
Matang sa Mapper
group-ldap-mapper
Mga Grupo sa LDAP DN
cn=groups,cn=accounts,dc=example,dc=org
Estratehiya sa Pagkuha sa Grupo sa Gumagamit
GET_GROUPS_FROM_USER_MEMBEROF_ATTRIBUTE
Kini nakompleto ang pag-setup sa federation, magpadayon kita sa pag-set up sa kliyente.
Pag-setup sa kliyente
Magbuhat ta ug bag-ong kliyente (usa ka aplikasyon nga makadawat mga tiggamit gikan sa Keycloak). lakaw ta:
Mga kliyente -> Paghimo
Option
bili
ID sa kliyente
kubernetes
Type sa Pag-access
confidenrial
Root URL
http://kubernetes.example.org/
Mga balido nga Redirect URI
http://kubernetes.example.org/*
Admin URL
http://kubernetes.example.org/
Maghimo usab kami usa ka sakup alang sa mga grupo:
Mga sakup sa kliyente -> Paghimo
Option
bili
Plantilya
No template
ngalan
groups
Bug-os nga grupo nga agianan
false
Ug pagbutang ug mapper alang kanila:
Mga sakup sa kliyente -> mga grupo -> Mga Mapper -> Paghimo
Option
bili
ngalan
groups
Matang sa Mapper
Group membership
Ngalan sa Pag-angkon sa Token
groups
Karon kinahanglan namong i-enable ang group mapping sa among kliyente:
Mga kliyente -> mga kubernetes -> Mga sakup sa kliyente -> Default nga Kasangkaran sa Kliyente
Pagpili mga grupo Π² Anaa nga mga Kasangkaran sa Kliyentei-klik Idugang ang pinili
Karon atong i-set up ang authentication sa atong aplikasyon, adto sa:
Mga kliyente -> mga kubernetes
Option
bili
Gi-aktibo ang pagtugot
ON
Iduso ta pagluwas ug kini nakompleto ang pag-setup sa kliyente, karon sa tab
Mga kliyente -> mga kubernetes -> Mga kredensyal
makuha nimo Sekreto nga atong gamiton unya.
Pag-configure sa Kubernetes
Ang pag-set up sa Kubernetes alang sa pagtugot sa OIDC kay gamay ra ug dili usa ka butang nga komplikado kaayo. Ang kinahanglan nimong buhaton mao ang pagbutang sa CA certificate sa imong OIDC server /etc/kubernetes/pki/oidc-ca.pem
ug idugang ang gikinahanglan nga mga kapilian alang sa kube-apiserver.
Aron mahimo kini, pag-update /etc/kubernetes/manifests/kube-apiserver.yaml
sa tanan nimong mga agalon:
...
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
...
Ug i-update usab ang kubeadm config sa cluster aron dili mawala kini nga mga setting sa panahon sa pag-update:
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
...
Nakompleto niini ang pag-setup sa Kubernetes. Mahimo nimong balikon kini nga mga lakang sa tanan nimong mga pungpong sa Kubernetes.
Inisyal nga Awtorisasyon
Pagkahuman niini nga mga lakang, aduna ka nay Kubernetes cluster nga adunay pagtugot sa OIDC nga gi-configure. Ang bugtong punto mao nga ang imong mga tiggamit wala pa adunay kliyente nga na-configure, ingon man ang ilang kaugalingon nga kubeconfig. Aron masulbad kini nga problema, kinahanglan nimo nga i-configure ang awtomatikong pag-isyu sa kubeconfig sa mga tiggamit pagkahuman sa malampuson nga pagtugot.
Aron mahimo kini, mahimo nimong gamiton ang mga espesyal nga aplikasyon sa web nga nagtugot kanimo sa pag-authenticate sa user ug dayon i-download ang nahuman nga kubeconfig. Usa sa labing kombenyente mao ang
Aron ma-configure ang Kuberos, igo na nga ihulagway ang template para sa kubeconfig ug ipadagan kini sa mga musunud nga parameter:
kuberos https://keycloak.example.org/auth/realms/kubernetes kubernetes /cfg/secret /cfg/template
Para sa dugang detalye tan-awa
Posible usab nga gamiton
Ang resulta nga kubeconfig mahimong masusi sa site users[].user.auth-provider.config.id-token
gikan sa imong kubeconfig ngadto sa usa ka porma sa site ug kuhaa dayon ang transcript.
RBAC setup
Kung gi-configure ang RBAC, mahimo nimong i-refer ang parehas nga username (field name
sa jwt token) ug para sa grupo sa mga tiggamit (field groups
sa jwt token). Ania ang usa ka pananglitan sa paghimo og mga pagtugot alang sa usa ka grupo 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
Dugang nga mga pananglitan alang sa RBAC makita sa
Pagbutang ug auth-proxy
Adunay nindot nga proyekto
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
Source: www.habr.com