Isang maikling tutorial kung paano mo magagamit ang Keycloak para ikonekta ang Kubernetes sa iyong LDAP server at i-configure ang pag-import ng mga user at grupo. Ito ay magbibigay-daan sa iyong i-configure ang RBAC para sa iyong mga user at gumamit ng auth-proxy upang protektahan ang Kubernetes Dashboard at iba pang mga application na hindi makapag-authenticate sa kanilang mga sarili.
Pag-install ng Keycloak
Ipagpalagay natin na mayroon ka nang LDAP server. Ito ay maaaring Active Directory, FreeIPA, OpenLDAP o anumang bagay. Kung wala kang LDAP server, sa prinsipyo maaari kang lumikha ng mga user nang direkta sa interface ng Keycloak, o gumamit ng mga pampublikong oidc provider (Google, Github, Gitlab), ang resulta ay halos pareho.
Una sa lahat, i-install natin ang Keycloak mismo. Ang pag-install ay maaaring isagawa nang hiwalay o direkta sa isang Kubernetes cluster. Bilang isang panuntunan, kung mayroon kang ilang mga Kubernetes cluster, mas madaling i-install ito nang hiwalay. Sa kabilang banda maaari mong palaging gamitin
Upang mag-imbak ng data ng Keycloak kakailanganin mo ng isang database. Default ay h2
(lahat ng data ay lokal na nakaimbak), ngunit posible rin itong gamitin postgres
, mysql
o mariadb
.
Kung magpasya ka pa ring mag-install ng Keycloak nang hiwalay, makakakita ka ng mas detalyadong mga tagubilin sa
Pag-setup ng Federation
Una sa lahat, gumawa tayo ng bagong kaharian. Realm ay ang puwang ng aming aplikasyon. Ang bawat application ay maaaring magkaroon ng sarili nitong larangan na may iba't ibang user at mga setting ng pahintulot. Ang Master realm ay ginagamit ng Keycloak mismo at ito ay mali na gamitin ito para sa anumang bagay.
Push Magdagdag ng kaharian
Opsyon
halaga
Pangalan
kubernetes
Display Name
Kubernetes
HTML Display Name
<img src="https://kubernetes.io/images/nav_logo.svg" width="400" >
Bilang default, sinusuri ng Kubernetes kung kumpirmado o hindi ang email ng user. Dahil ginagamit namin ang sarili naming LDAP server, halos palaging babalik ang pagsusuring ito false
. Huwag paganahin ang representasyon ng opsyong ito sa Kubernetes:
Mga saklaw ng kliyente -> Email -> Mga Mapper -> Na-verify ang email (Burahin)
Ngayon, i-set up natin ang federation; para gawin ito, pumunta sa:
User federation -> Magdagdag ng provider⦠-> ldap
Narito ang isang halimbawa ng mga setting para sa FreeIPA:
Opsyon
halaga
Display Name ng Console
freeipa.example.org
Magtitinda
Red Hat Directory Server
UUID LDAP attribute
ipauniqueid
URL ng koneksyon
ldaps://freeipa.example.org
Mga gumagamit DN
cn=users,cn=accounts,dc=example,dc=org
Itali ang DN
uid=keycloak-svc,cn=users,cn=accounts,dc=example,dc=org
Bind Credential
<password>
Payagan ang pagpapatunay ng Kerberos:
on
Kaharian ng Kerberos:
EXAMPLE.ORG
Principal ng Server:
HTTP/[email protected]
KeyTab:
/etc/krb5.keytab
Gumagamit keycloak-svc
kailangang gawin nang maaga sa aming LDAP server.
Sa kaso ng Active Directory, kailangan mo lang pumili Vendor: Active Directory at ang mga kinakailangang setting ay awtomatikong ilalagay sa form.
Push I-save ang
Ngayon magpatuloy tayo:
User federation -> freeipa.example.org -> Mga Mapper -> Pangalan
Opsyon
halaga
Ldap attribute
givenName
Ngayon paganahin natin ang group mapping:
User federation -> freeipa.example.org -> Mga Mapper -> Lumikha
Opsyon
halaga
Pangalan
groups
Uri ng Mapper
group-ldap-mapper
LDAP Groups DN
cn=groups,cn=accounts,dc=example,dc=org
Diskarte sa Pagkuha ng Mga Grupo ng Gumagamit
GET_GROUPS_FROM_USER_MEMBEROF_ATTRIBUTE
Ngayong kumpleto na ang setup ng federation, magpatuloy tayo sa pag-set up ng kliyente.
Setup ng kliyente
Gumawa tayo ng bagong kliyente (isang application na tatanggap ng mga user mula sa Keycloak). Ituloy natin:
Kliyente -> Lumikha
Opsyon
halaga
customer ID
kubernetes
Uri ng Pag-access
confidenrial
URL ng ugat
http://kubernetes.example.org/
Mga wastong URI ng Pag-redirect
http://kubernetes.example.org/*
Admin URL
http://kubernetes.example.org/
Gumawa din tayo ng saklaw para sa mga pangkat:
Saklaw ng Kliyente -> Lumikha
Opsyon
halaga
Template
No template
Pangalan
groups
Buong landas ng pangkat
false
At mag-set up ng mapper para sa kanila:
Saklaw ng Kliyente -> grupo -> Mga Mapper -> Lumikha
Opsyon
halaga
Pangalan
groups
Uri ng Mapper
Group membership
Pangalan ng Claim ng Token
groups
Ngayon ay kailangan naming paganahin ang pangkat ng pagmamapa sa saklaw ng aming kliyente:
Kliyente -> Kubernetes -> Saklaw ng Kliyente -> Default na Saklaw ng Kliyente
piliin grupo Π² Magagamit na Saklaw ng Kliyentei-click Idagdag ang napili
Ngayon ay i-configure natin ang pagpapatunay ng aming application, pumunta sa:
Kliyente -> Kubernetes
Opsyon
halaga
Pinagana ang Pahintulot
ON
Pindutin natin i-save ang at kasama nito ang pag-setup ng kliyente ay nakumpleto, ngayon sa tab
Kliyente -> Kubernetes -> kredensyal
makukuha mo Lihim na gagamitin pa natin.
Pag-configure ng Kubernetes
Ang pag-set up ng Kubernetes para sa awtorisasyon ng OIDC ay medyo maliit at hindi masyadong kumplikado. Ang kailangan mo lang gawin ay ilagay ang CA certificate ng iyong OIDC server /etc/kubernetes/pki/oidc-ca.pem
at idagdag ang mga kinakailangang opsyon para sa kube-apiserver.
Upang gawin ito, i-update /etc/kubernetes/manifests/kube-apiserver.yaml
sa lahat ng iyong mga panginoon:
...
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
...
Gayundin, i-update ang kubeadm config sa cluster upang hindi mawala ang mga setting na ito kapag nag-a-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
...
Kinukumpleto nito ang pag-setup ng Kubernetes. Maaari mong ulitin ang mga hakbang na ito sa lahat ng iyong Kubernetes cluster.
Paunang awtorisasyon
Pagkatapos ng mga hakbang na ito, magkakaroon ka na ng Kubernetes cluster na may naka-configure na awtorisasyon sa OIDC. Ang tanging bagay ay ang iyong mga gumagamit ay wala pang naka-configure na kliyente o kanilang sariling kubeconfig. Upang malutas ang problemang ito, kailangan mong i-configure ang awtomatikong pamamahagi ng kubeconfig sa mga user pagkatapos ng matagumpay na awtorisasyon.
Upang gawin ito, maaari kang gumamit ng mga espesyal na web application na nagbibigay-daan sa iyong patunayan ang gumagamit at pagkatapos ay i-download ang handa na kubeconfig. Isa sa mga pinaka-maginhawa ay
Upang i-configure ang Kuberos, ilarawan lamang ang template para sa kubeconfig at patakbuhin ito gamit ang mga sumusunod na parameter:
kuberos https://keycloak.example.org/auth/realms/kubernetes kubernetes /cfg/secret /cfg/template
Para sa mas detalyadong impormasyon tingnan
Posible rin itong gamitin
Ang resultang kubeconfig ay maaaring suriin sa website users[].user.auth-provider.config.id-token
mula sa iyong kubeconfig hanggang sa form sa website at agad na makatanggap ng transcript.
Pag-set up ng RBAC
Kapag kino-configure ang RBAC, maaari kang sumangguni sa parehong username (field name
sa jwt token), at bawat pangkat ng gumagamit (field groups
sa jwt token). Narito ang isang halimbawa ng pag-set up ng mga karapatan para sa isang 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
Higit pang mga halimbawa para sa RBAC ay matatagpuan sa
Pagtatakda ng auth-proxy
Mayroong isang kahanga-hangang 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
Pinagmulan: www.habr.com