మీ LDAP సర్వర్కు Kubernetesని కనెక్ట్ చేయడానికి మరియు వినియోగదారులు మరియు సమూహాల దిగుమతిని కాన్ఫిగర్ చేయడానికి మీరు Keycloakని ఎలా ఉపయోగించవచ్చనే దానిపై ఒక చిన్న ట్యుటోరియల్. ఇది మీ వినియోగదారుల కోసం RBACని కాన్ఫిగర్ చేయడానికి మరియు Kubernetes డ్యాష్బోర్డ్ మరియు తమను తాము ప్రామాణీకరించలేని ఇతర అప్లికేషన్లను రక్షించడానికి auth-proxyని ఉపయోగించడానికి మిమ్మల్ని అనుమతిస్తుంది.
కీక్లాక్ ఇన్స్టాలేషన్
మీకు ఇప్పటికే LDAP సర్వర్ ఉందని అనుకుందాం. ఇది యాక్టివ్ డైరెక్టరీ, FreeIPA, OpenLDAP లేదా ఏదైనా కావచ్చు. మీకు LDAP సర్వర్ లేకపోతే, సూత్రప్రాయంగా మీరు Keycloak ఇంటర్ఫేస్లో నేరుగా వినియోగదారులను సృష్టించవచ్చు లేదా పబ్లిక్ oidc ప్రొవైడర్లను ఉపయోగించవచ్చు (Google, Github, Gitlab), ఫలితం దాదాపు ఒకే విధంగా ఉంటుంది.
అన్నింటిలో మొదటిది, కీక్లోక్ని ఇన్స్టాల్ చేద్దాం. ఇన్స్టాలేషన్ను విడిగా లేదా నేరుగా కుబెర్నెట్స్ క్లస్టర్లో నిర్వహించవచ్చు. నియమం ప్రకారం, మీకు అనేక కుబెర్నెట్స్ క్లస్టర్లు ఉంటే, దానిని విడిగా ఇన్స్టాల్ చేయడం సులభం అవుతుంది. మరోవైపు మీరు ఎల్లప్పుడూ ఉపయోగించవచ్చు
కీక్లోక్ డేటాను నిల్వ చేయడానికి మీకు డేటాబేస్ అవసరం. డిఫాల్ట్ h2
(అన్ని డేటా స్థానికంగా నిల్వ చేయబడుతుంది), కానీ దానిని ఉపయోగించడం కూడా సాధ్యమే postgres
, mysql
లేదా mariadb
.
మీరు ఇప్పటికీ కీక్లోక్ని విడిగా ఇన్స్టాల్ చేయాలని నిర్ణయించుకుంటే, మీరు మరింత వివరణాత్మక సూచనలను కనుగొనవచ్చు
ఫెడరేషన్ సెటప్
ముందుగా కొత్త రాజ్యాన్ని సృష్టిద్దాం. రాజ్యం అనేది మా అప్లికేషన్ యొక్క స్థలం. ప్రతి అప్లికేషన్ విభిన్న వినియోగదారులు మరియు అధికార సెట్టింగ్లతో దాని స్వంత రాజ్యాన్ని కలిగి ఉంటుంది. మాస్టర్ రాజ్యం కీక్లోక్ ద్వారానే ఉపయోగించబడుతుంది మరియు దానిని వేరే దేనికైనా ఉపయోగించడం తప్పు.
పత్రికా రాజ్యాన్ని జోడించండి
ఎంపిక
విలువ
పేరు
kubernetes
ప్రదర్శన పేరు
Kubernetes
HTML ప్రదర్శన పేరు
<img src="https://kubernetes.io/images/nav_logo.svg" width="400" >
Kubernetes డిఫాల్ట్గా వినియోగదారు ఇమెయిల్ ధృవీకరించబడిందో లేదో తనిఖీ చేస్తుంది. మేము మా స్వంత LDAP సర్వర్ని ఉపయోగిస్తున్నందున, ఈ చెక్ దాదాపు ఎల్లప్పుడూ తిరిగి వస్తుంది false
. Kubernetesలో ఈ ఎంపిక ప్రాతినిధ్యాన్ని నిలిపివేద్దాం:
క్లయింట్ స్కోప్లు -> ఇ-మెయిల్ -> మ్యాపర్లు -> ఇమెయిల్ ధృవీకరించబడింది (తొలగించు)
ఇప్పుడు సమాఖ్యను సెటప్ చేద్దాం; దీన్ని చేయడానికి, దీనికి వెళ్లండి:
వినియోగదారు సమాఖ్య -> ప్రొవైడర్ని జోడించండి... -> LDAP
FreeIPA కోసం సెట్టింగ్ల ఉదాహరణ ఇక్కడ ఉంది:
ఎంపిక
విలువ
కన్సోల్ ప్రదర్శన పేరు
freeipa.example.org
Vendor
Red Hat Directory Server
UUID LDAP లక్షణం
ipauniqueid
కనెక్షన్ URL
ldaps://freeipa.example.org
వినియోగదారులు DN
cn=users,cn=accounts,dc=example,dc=org
బైండ్ DN
uid=keycloak-svc,cn=users,cn=accounts,dc=example,dc=org
బైండ్ క్రెడెన్షియల్
<password>
Kerberos ప్రమాణీకరణను అనుమతించండి:
on
కెర్బెరోస్ రాజ్యం:
EXAMPLE.ORG
సర్వర్ ప్రిన్సిపాల్:
HTTP/[email protected]
కీటాబ్:
/etc/krb5.keytab
యూజర్ keycloak-svc
మా LDAP సర్వర్లో ముందుగానే సృష్టించాలి.
యాక్టివ్ డైరెక్టరీ విషయంలో, మీరు కేవలం ఎంచుకోవాలి విక్రేత: యాక్టివ్ డైరెక్టరీ మరియు అవసరమైన సెట్టింగ్లు స్వయంచాలకంగా ఫారమ్లోకి నమోదు చేయబడతాయి.
పత్రికా సేవ్
ఇప్పుడు మనం ముందుకు వెళ్దాం:
వినియోగదారు సమాఖ్య -> freeipa.example.org -> మ్యాపర్లు -> మొదటి పేరు
ఎంపిక
విలువ
Ldap లక్షణం
givenName
ఇప్పుడు గ్రూప్ మ్యాపింగ్ని ఎనేబుల్ చేద్దాం:
వినియోగదారు సమాఖ్య -> freeipa.example.org -> మ్యాపర్లు -> సృష్టించు
ఎంపిక
విలువ
పేరు
groups
మ్యాపర్ రకం
group-ldap-mapper
LDAP సమూహాలు DN
cn=groups,cn=accounts,dc=example,dc=org
వినియోగదారు సమూహాలు వ్యూహాన్ని పునరుద్ధరించండి
GET_GROUPS_FROM_USER_MEMBEROF_ATTRIBUTE
ఇప్పుడు ఫెడరేషన్ సెటప్ పూర్తయింది, క్లయింట్ని సెటప్ చేయడానికి వెళ్దాం.
క్లయింట్ సెటప్
కొత్త క్లయింట్ని (కీక్లోక్ నుండి వినియోగదారులను స్వీకరించే అప్లికేషన్) సృష్టిద్దాం. ముందుకు వెళ్దాం:
క్లయింట్లు -> సృష్టించు
ఎంపిక
విలువ
కస్టమర్ ఐడి
kubernetes
యాక్సెస్ రకం
confidenrial
రూట్ URL
http://kubernetes.example.org/
చెల్లుబాటు అయ్యే దారిమార్పు URIలు
http://kubernetes.example.org/*
అడ్మిన్ URL
http://kubernetes.example.org/
సమూహాల కోసం స్కోప్ను కూడా సృష్టిద్దాం:
క్లయింట్ స్కోప్లు -> సృష్టించు
ఎంపిక
విలువ
మూస
No template
పేరు
groups
పూర్తి సమూహ మార్గం
false
మరియు వారి కోసం మ్యాపర్ను సెటప్ చేయండి:
క్లయింట్ స్కోప్లు -> సమూహాలు -> మ్యాపర్లు -> సృష్టించు
ఎంపిక
విలువ
పేరు
groups
మ్యాపర్ రకం
Group membership
టోకెన్ దావా పేరు
groups
ఇప్పుడు మేము మా క్లయింట్ పరిధిలో మ్యాపింగ్ సమూహాన్ని ప్రారంభించాలి:
క్లయింట్లు -> కుబెర్నెట్స్ -> క్లయింట్ స్కోప్లు -> డిఫాల్ట్ క్లయింట్ స్కోప్లు
ఎంచుకోవడం సమూహాలు в అందుబాటులో ఉన్న క్లయింట్ స్కోప్లు, నొక్కండి ఎంపిక చేసిన జోడించండి
ఇప్పుడు మన అప్లికేషన్ యొక్క ప్రమాణీకరణను కాన్ఫిగర్ చేద్దాం, దీనికి వెళ్లండి:
క్లయింట్లు -> కుబెర్నెట్స్
ఎంపిక
విలువ
ఆథరైజేషన్ ప్రారంభించబడింది
ON
నొక్కుదాం సేవ్ మరియు దీనితో క్లయింట్ సెటప్ పూర్తయింది, ఇప్పుడు ట్యాబ్లో ఉంది
క్లయింట్లు -> కుబెర్నెట్స్ -> ఆధారాలను
మీరు పొందవచ్చు సీక్రెట్ మేము మరింత ఉపయోగిస్తాము.
కుబెర్నెట్లను కాన్ఫిగర్ చేస్తోంది
OIDC అధికారం కోసం కుబెర్నెట్లను సెటప్ చేయడం చాలా చిన్నవిషయం మరియు చాలా క్లిష్టంగా లేదు. మీరు చేయాల్సిందల్లా మీ OIDC సర్వర్ యొక్క CA ప్రమాణపత్రాన్ని ఉంచడం /etc/kubernetes/pki/oidc-ca.pem
మరియు kube-apiserver కోసం అవసరమైన ఎంపికలను జోడించండి.
దీన్ని చేయడానికి, నవీకరించండి /etc/kubernetes/manifests/kube-apiserver.yaml
మీ యజమానులందరిపై:
...
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
...
అలాగే, అప్డేట్ చేస్తున్నప్పుడు ఈ సెట్టింగ్లను కోల్పోకుండా ఉండేందుకు క్లస్టర్లో kubeadm కాన్ఫిగర్ని అప్డేట్ చేయండి:
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
...
ఇది కుబెర్నెట్స్ కాన్ఫిగరేషన్ను పూర్తి చేస్తుంది. మీరు మీ అన్ని కుబెర్నెట్స్ క్లస్టర్లలో ఈ దశలను పునరావృతం చేయవచ్చు.
ప్రారంభ అధికారం
ఈ దశల తర్వాత, మీరు ఇప్పటికే కాన్ఫిగర్ చేయబడిన OIDC అధికారంతో కూడిన Kubernetes క్లస్టర్ని కలిగి ఉంటారు. ఏకైక విషయం ఏమిటంటే, మీ వినియోగదారులకు ఇంకా కాన్ఫిగర్ చేయబడిన క్లయింట్ లేదా వారి స్వంత kubeconfig లేదు. ఈ సమస్యను పరిష్కరించడానికి, మీరు విజయవంతమైన అధికారం తర్వాత వినియోగదారులకు kubeconfig యొక్క ఆటోమేటిక్ పంపిణీని కాన్ఫిగర్ చేయాలి.
దీన్ని చేయడానికి, మీరు వినియోగదారుని ప్రమాణీకరించడానికి మరియు సిద్ధంగా ఉన్న kubeconfigని డౌన్లోడ్ చేయడానికి మిమ్మల్ని అనుమతించే ప్రత్యేక వెబ్ అప్లికేషన్లను ఉపయోగించవచ్చు. అత్యంత అనుకూలమైన వాటిలో ఒకటి
Kuberosని కాన్ఫిగర్ చేయడానికి, kubeconfig కోసం టెంప్లేట్ను వివరించండి మరియు కింది పారామితులతో దీన్ని అమలు చేయండి:
kuberos https://keycloak.example.org/auth/realms/kubernetes kubernetes /cfg/secret /cfg/template
మరింత వివరణాత్మక సమాచారం కోసం చూడండి
ఉపయోగించడం కూడా సాధ్యమే
ఫలితంగా kubeconfig వెబ్సైట్లో తనిఖీ చేయవచ్చు users[].user.auth-provider.config.id-token
మీ kubeconfig నుండి వెబ్సైట్లోని ఫారమ్కి మరియు వెంటనే ట్రాన్స్క్రిప్ట్ను స్వీకరించండి.
RBACని సెటప్ చేస్తోంది
RBACని కాన్ఫిగర్ చేస్తున్నప్పుడు, మీరు వినియోగదారు పేరు (ఫీల్డ్.) రెండింటినీ సూచించవచ్చు name
jwt టోకెన్లో), మరియు ఒక్కో వినియోగదారు సమూహానికి (ఫీల్డ్ groups
jwt టోకెన్లో). సమూహం కోసం హక్కులను సెటప్ చేయడానికి ఇక్కడ ఒక ఉదాహరణ ఉంది 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
RBAC కోసం మరిన్ని ఉదాహరణలు ఇందులో చూడవచ్చు
auth-proxyని సెట్ చేస్తోంది
అద్భుతమైన ప్రాజెక్ట్ ఉంది
డాష్బోర్డ్-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
మూలం: www.habr.com