Tiwtorial bach ar sut i ddefnyddio Keycloak i gysylltu Kubernetes â'ch gweinydd LDAP a sefydlu mewnforio defnyddwyr a grwpiau. Bydd hyn yn caniatáu ichi sefydlu RBAC ar gyfer eich defnyddwyr a defnyddio auth-proxy i amddiffyn Dangosfwrdd Kubernetes a chymwysiadau eraill nad ydynt yn gwybod sut i awdurdodi eu hunain.
Gosod cloak
Gadewch i ni dybio bod gennych weinydd LDAP eisoes. Gallai fod yn Active Directory, FreeIPA, OpenLDAP neu beth bynnag. Os nad oes gennych weinydd LDAP, yna mewn egwyddor gallwch greu defnyddwyr yn uniongyrchol yn y rhyngwyneb Keycloak, neu ddefnyddio darparwyr oidc cyhoeddus (Google, Github, Gitlab), bydd y canlyniad bron yr un fath.
Yn gyntaf oll, gadewch i ni osod Keycloak ei hun, gellir perfformio'r gosodiad ar wahân, neu'n uniongyrchol i'r clwstwr Kubernetes, fel rheol, os oes gennych nifer o glystyrau Kubernetes, byddai'n haws ei osod ar wahân. Ar y llaw arall, gallwch chi bob amser ddefnyddio
I storio data Keycloak, bydd angen cronfa ddata arnoch. Y rhagosodiad yw h2
(mae'r holl ddata'n cael ei storio'n lleol), ond mae hefyd yn bosibl ei ddefnyddio postgres
, mysql
neu mariadb
.
Os ydych chi'n dal i benderfynu gosod Keycloak ar wahân, gallwch ddod o hyd i gyfarwyddiadau manylach yn
Sefydlu Ffederasiwn
Yn gyntaf oll, gadewch i ni greu tir newydd. Teyrnas yw gofod ein cais. Gall pob cais gael ei deyrnas ei hun gyda gwahanol ddefnyddwyr a gosodiadau awdurdodi. Defnyddir y parth meistr gan Keycloak ei hun ac mae ei ddefnyddio ar gyfer unrhyw beth arall yn anghywir.
Gwthio Ychwanegu tir
Opsiwn
Gwerth
Enw
kubernetes
arddangos Enw
Kubernetes
Enw Arddangos HTML
<img src="https://kubernetes.io/images/nav_logo.svg" width="400" >
Mae Kubernetes yn ddiofyn yn gwirio a yw e-bost y defnyddiwr wedi'i gadarnhau ai peidio. Gan ein bod yn defnyddio ein gweinydd LDAP ein hunain, bydd y gwiriad hwn bron bob amser yn dychwelyd false
. Gadewch i ni analluogi cynrychiolaeth y gosodiad hwn yn Kubernetes:
Cwmpasau cleient -> E-bost -> Mapwyr -> e-bost wedi'i wirio (Dileu)
Nawr, gadewch i ni sefydlu'r ffederasiwn, ar gyfer hyn awn i:
Ffederasiwn defnyddwyr -> Ychwanegu darparwr… -> ldap
Dyma enghraifft o setup ar gyfer FreeIPA:
Opsiwn
Gwerth
Enw Arddangos Consol
freeipa.example.org
Gwerthwr
Red Hat Directory Server
Priodoledd UUID LDAP
ipauniqueid
URL Cysylltiad
ldaps://freeipa.example.org
Defnyddiwr DN
cn=users,cn=accounts,dc=example,dc=org
Rhwymwch DN
uid=keycloak-svc,cn=users,cn=accounts,dc=example,dc=org
Rhwymo Credential
<password>
Caniatáu dilysu Kerberos:
on
Teyrnas Kerberos:
EXAMPLE.ORG
Pennaeth Gweinydd:
HTTP/[email protected]
tab allweddol:
/etc/krb5.keytab
Defnyddiwr keycloak-svc
rhaid ei greu ymlaen llaw ar ein gweinydd LDAP.
Yn achos Active Directory, dewiswch Gwerthwr: Active Directory a bydd y gosodiadau angenrheidiol yn cael eu mewnosod yn y ffurflen yn awtomatig.
Gwthio Save
Nawr, gadewch i ni symud ymlaen:
Ffederasiwn defnyddwyr -> freeipa.example.org -> Mapwyr -> Enw cyntaf
Opsiwn
Gwerth
Priodoleddau ldap
givenName
Nawr galluogi mapio grŵp:
Ffederasiwn defnyddwyr -> freeipa.example.org -> Mapwyr -> Creu
Opsiwn
Gwerth
Enw
groups
Math o fapiwr
group-ldap-mapper
Grwpiau LDAP DN
cn=groups,cn=accounts,dc=example,dc=org
Strategaeth Adalw Grŵp Defnyddwyr
GET_GROUPS_FROM_USER_MEMBEROF_ATTRIBUTE
Mae hyn yn cwblhau'r gosodiad ffederasiwn, gadewch i ni symud ymlaen i sefydlu'r cleient.
Gosodiad cleient
Gadewch i ni greu cleient newydd (cymhwysiad a fydd yn derbyn defnyddwyr gan Keycloak). Awn ni:
Cleientiaid -> Creu
Opsiwn
Gwerth
ID y cleient
kubernetes
Math o Fynediad
confidenrial
URL gwraidd
http://kubernetes.example.org/
URIs Ailgyfeirio dilys
http://kubernetes.example.org/*
URL gweinyddol
http://kubernetes.example.org/
Byddwn hefyd yn creu cwmpas ar gyfer grwpiau:
Cwmpasau cleient -> Creu
Opsiwn
Gwerth
templed
No template
Enw
groups
Llwybr grŵp llawn
false
A gosod mapiwr ar eu cyfer:
Cwmpasau cleient -> grwpiau -> Mapwyr -> Creu
Opsiwn
Gwerth
Enw
groups
Math Mapper
Group membership
Enw Hawliad Tocyn
groups
Nawr mae angen i ni alluogi mapio grŵp o fewn cwmpas ein cleient:
Cleientiaid -> cubernetes -> Cwmpasau cleient -> Sgôp Cleient Rhagosodedig
dewiswch grwpiau в Cwmpas Cleient Ar Gaelcliciwch Ychwanegu a ddewiswyd
Nawr, gadewch i ni sefydlu dilysiad ein cais, ewch i:
Cleientiaid -> cubernetes
Opsiwn
Gwerth
Awdurdodiad wedi'i Galluogi
ON
Gadewch i ni wthio arbed ac mae hyn yn cwblhau'r gosodiad cleient, nawr ar y tab
Cleientiaid -> cubernetes -> Credentials
gallwch gael Secret y byddwn yn ei ddefnyddio yn nes ymlaen.
Ffurfweddu Kubernetes
Mae sefydlu Kubernetes ar gyfer awdurdodiad OIDC yn eithaf dibwys ac nid yw'n rhywbeth cymhleth iawn. Y cyfan sydd angen i chi ei wneud yw rhoi tystysgrif CA eich gweinydd OIDC i mewn /etc/kubernetes/pki/oidc-ca.pem
ac ychwanegu'r opsiynau angenrheidiol ar gyfer kube-apiserver.
I wneud hyn, diweddaru /etc/kubernetes/manifests/kube-apiserver.yaml
ar eich holl feistri:
...
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
...
A hefyd diweddaru'r ffurfwedd kubeadm yn y clwstwr er mwyn peidio â cholli'r gosodiadau hyn yn ystod y diweddariad:
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
...
Mae hyn yn cwblhau gosodiad Kubernetes. Gallwch ailadrodd y camau hyn ar draws eich holl glystyrau Kubernetes.
Awdurdodiad Cychwynnol
Ar ôl y camau hyn, bydd gennych eisoes glwstwr Kubernetes gydag awdurdodiad OIDC wedi'i ffurfweddu. Yr unig bwynt yw nad oes gan eich defnyddwyr gleient wedi'i ffurfweddu eto, yn ogystal â'u kubeconfig eu hunain. I ddatrys y broblem hon, mae angen i chi ffurfweddu issuance awtomatig kubeconfig i ddefnyddwyr ar ôl awdurdodi llwyddiannus.
I wneud hyn, gallwch ddefnyddio cymwysiadau gwe arbennig sy'n eich galluogi i ddilysu'r defnyddiwr ac yna lawrlwytho'r kubeconfig gorffenedig. Un o'r rhai mwyaf cyfleus yw
I ffurfweddu Kuberos, mae'n ddigon disgrifio'r templed ar gyfer kubeconfig a'i redeg gyda'r paramedrau canlynol:
kuberos https://keycloak.example.org/auth/realms/kubernetes kubernetes /cfg/secret /cfg/template
Am fwy o fanylion gweler
Mae hefyd yn bosibl ei ddefnyddio
Gellir gwirio'r kubeconfig canlyniadol ar y wefan users[].user.auth-provider.config.id-token
o'ch kubeconfig i ffurflen ar y wefan a chael y trawsgrifiad ar unwaith.
Gosodiad RBAC
Wrth ffurfweddu RBAC, gallwch gyfeirio at yr enw defnyddiwr (maes name
yn y tocyn jwt) ac ar gyfer grŵp o ddefnyddwyr (maes groups
mewn jwt tocyn). Dyma enghraifft o osod caniatadau ar gyfer grŵp 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
Ceir rhagor o enghreifftiau ar gyfer RBAC yn
Gosod auth-proxy
Mae yna brosiect gwych
dangosfwrdd-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
Ffynhonnell: hab.com