Lítið námskeið um hvernig á að nota Keycloak til að tengja Kubernetes við LDAP netþjóninn þinn og setja upp innflutning á notendum og hópum. Þetta gerir þér kleift að setja upp RBAC fyrir notendur þína og nota auðkenningar-proxy til að vernda Kubernetes Dashboard og önnur forrit sem vita ekki hvernig á að heimila sig.
Keycloak uppsetning
Gerum ráð fyrir að þú sért nú þegar með LDAP netþjón. Það gæti verið Active Directory, FreeIPA, OpenLDAP eða hvað sem er. Ef þú ert ekki með LDAP netþjón, þá í grundvallaratriðum geturðu búið til notendur beint í Keycloak viðmótinu, eða notað opinbera oidc veitendur (Google, Github, Gitlab), niðurstaðan verður næstum sú sama.
Í fyrsta lagi skulum við setja upp Keycloak sjálft, uppsetninguna er hægt að framkvæma sérstaklega, eða beint í Kubernetes klasann, að jafnaði ef þú ert með nokkra Kubernetes klasa væri auðveldara að setja hann upp sérstaklega. Á hinn bóginn geturðu alltaf notað
Til að geyma Keycloak gögn þarftu gagnagrunn. Sjálfgefið er h2
(öll gögn eru geymd á staðnum), en það er líka hægt að nota postgres
, mysql
eða mariadb
.
Ef þú ákveður samt að setja Keycloak upp sérstaklega geturðu fundið ítarlegri leiðbeiningar í
Uppsetning sambandsins
Fyrst af öllu skulum við búa til nýtt ríki. Realm er rými umsóknar okkar. Hvert forrit getur haft sitt eigið svið með mismunandi notendum og heimildarstillingum. Meistararíkið er notað af Keycloak sjálfu og það er rangt að nota það í eitthvað annað.
Ýttu Bæta við ríki
valkostur
gildi
heiti
kubernetes
Sýna nafn
Kubernetes
HTML birtingarnafn
<img src="https://kubernetes.io/images/nav_logo.svg" width="400" >
Kubernetes athugar sjálfgefið hvort tölvupóstur notandans sé staðfestur eða ekki. Þar sem við erum að nota okkar eigin LDAP miðlara mun þessi ávísun næstum alltaf koma aftur false
. Slökkum á framsetningu þessarar stillingar í Kubernetes:
Umfang viðskiptavina -> Tölvupóstur -> Kortagerðarmenn -> tölvupóstur staðfestur (Eyða)
Nú skulum við stofna sambandið, fyrir þetta förum við til:
Notendasamband -> Bæta við þjónustuaðila... -> ldap
Hér er dæmi um uppsetningu fyrir FreeIPA:
valkostur
gildi
Sýningarheiti stjórnborðs
freeipa.example.org
Vendor
Red Hat Directory Server
UUID LDAP eiginleiki
ipauniqueid
Slóð tengingar
ldaps://freeipa.example.org
Notanda DN
cn=users,cn=accounts,dc=example,dc=org
Bind DN
uid=keycloak-svc,cn=users,cn=accounts,dc=example,dc=org
Binda skilríki
<password>
Leyfa Kerberos auðkenningu:
on
Kerberos ríki:
EXAMPLE.ORG
Skólastjóri netþjóns:
HTTP/[email protected]
lykilflipi:
/etc/krb5.keytab
Notandi keycloak-svc
verður að búa til fyrirfram á LDAP þjóninum okkar.
Ef um er að ræða Active Directory skaltu einfaldlega velja Seljandi: Active Directory og nauðsynlegar stillingar verða settar inn í eyðublaðið sjálfkrafa.
Ýttu Vista
Nú skulum við halda áfram:
Notendasamband -> freeipa.example.org -> Kortagerðarmenn -> Fyrsta nafn
valkostur
gildi
Ldap eiginleikar
givenName
Nú skulum við virkja hópkortlagningu:
Notendasamband -> freeipa.example.org -> Kortagerðarmenn -> Búa til
valkostur
gildi
heiti
groups
Mapper gerð
group-ldap-mapper
LDAP hópar DN
cn=groups,cn=accounts,dc=example,dc=org
Notendahóps sækja stefnu
GET_GROUPS_FROM_USER_MEMBEROF_ATTRIBUTE
Þetta lýkur uppsetningu sambandsins, við skulum halda áfram að setja upp viðskiptavininn.
Uppsetning viðskiptavinar
Búum til nýjan viðskiptavin (forrit sem mun taka á móti notendum frá Keycloak). Förum:
Viðskiptavinir -> Búa til
valkostur
gildi
Auðkenni viðskiptavinar
kubernetes
Aðgangsgerð
confidenrial
Rótarslóð
http://kubernetes.example.org/
Gildar tilvísunar-URI
http://kubernetes.example.org/*
Slóð stjórnanda
http://kubernetes.example.org/
Við munum einnig búa til svigrúm fyrir hópa:
Umfang viðskiptavina -> Búa til
valkostur
gildi
Snið
No template
heiti
groups
Full hópleið
false
Og settu upp kortara fyrir þá:
Umfang viðskiptavina -> hópar -> Kortagerðarmenn -> Búa til
valkostur
gildi
heiti
groups
Tegund kortlagningar
Group membership
Nafn auðkenniskröfu
groups
Nú þurfum við að virkja hópkortlagningu í umfangi viðskiptavina okkar:
Viðskiptavinir -> Kubernetes -> Umfang viðskiptavina -> Sjálfgefin umfang viðskiptavinar
Veldu hópar в Laus viðskiptavinarsviðsmellur Bæta við völdum
Nú skulum við setja upp auðkenningu forritsins okkar, fara á:
Viðskiptavinir -> Kubernetes
valkostur
gildi
Heimild virkjuð
ON
Við skulum ýta vista og þetta lýkur uppsetningu viðskiptavinar, núna á flipanum
Viðskiptavinir -> Kubernetes -> skilríki
þú getur fengið Secret sem við munum nota síðar.
Stillir Kubernetes
Að setja upp Kubernetes fyrir OIDC leyfi er frekar léttvægt og ekki eitthvað mjög flókið. Allt sem þú þarft að gera er að setja CA vottorð OIDC netþjónsins þíns inn í /etc/kubernetes/pki/oidc-ca.pem
og bættu við nauðsynlegum valkostum fyrir kube-apiserver.
Til að gera þetta, uppfærðu /etc/kubernetes/manifests/kube-apiserver.yaml
á öllum herrum þínum:
...
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
...
Og uppfærðu líka kubeadm stillinguna í þyrpingunni til að missa ekki þessar stillingar meðan á uppfærslunni stendur:
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
...
Þetta lýkur uppsetningu Kubernetes. Þú getur endurtekið þessi skref í öllum Kubernetes þyrpingunum þínum.
Frumheimild
Eftir þessi skref muntu þegar hafa Kubernetes þyrping með OIDC heimild stillt. Eini punkturinn er að notendur þínir hafa ekki enn stilltan biðlara, sem og eigin kubeconfig. Til að leysa þetta vandamál þarftu að stilla sjálfvirka útgáfu kubeconfig til notenda eftir árangursríka heimild.
Til að gera þetta geturðu notað sérstök vefforrit sem gera þér kleift að auðkenna notandann og síðan hlaða niður fullbúnu kubeconfig. Eitt það þægilegasta er
Til að stilla Kuberos er nóg að lýsa sniðmátinu fyrir kubeconfig og keyra það með eftirfarandi breytum:
kuberos https://keycloak.example.org/auth/realms/kubernetes kubernetes /cfg/secret /cfg/template
Fyrir frekari upplýsingar sjá
Það er líka hægt að nota
Hægt er að athuga kubeconfig sem myndast á síðunni users[].user.auth-provider.config.id-token
úr kubeconfig yfir í eyðublað á síðunni og fáðu afritið strax.
RBAC uppsetning
Þegar þú stillir RBAC geturðu vísað til bæði notendanafnsins (reit name
í jwt tákninu) og fyrir hóp notenda (reitur groups
í jwt tákni). Hér er dæmi um að setja heimildir fyrir hó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
Fleiri dæmi um RBAC má finna í
Auth-proxy stillt
Þar er stórkostlegt verkefni
mælaborð-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
Heimild: www.habr.com