Як дастури хурд дар бораи чӣ гуна истифода бурдани Keycloak барои пайваст кардани Kubernetes ба сервери LDAP-и худ ва танзими воридоти корбарон ва гурӯҳҳо. Ин ба шумо имкон медиҳад, ки RBAC-ро барои корбарони худ насб кунед ва барои ҳифзи панели Kubernetes ва дигар замимаҳо, ки чӣ тавр худашон иҷозат доданро намедонанд, аз прокси аутентификация истифода баред.
Насби клавиатура
Фарз мекунем, ки шумо аллакай сервери LDAP доред. Он метавонад Active Directory, FreeIPA, OpenLDAP ё ҳама чиз бошад. Агар шумо сервери LDAP надошта бошед, пас шумо метавонед бевосита дар интерфейси Keycloak корбаронро эҷод кунед ё провайдерҳои ҷамъиятии oidc (Google, Github, Gitlab) истифода баред, натиҷа тақрибан якхела хоҳад буд.
Пеш аз ҳама, биёед худи Keycloak-ро насб кунем, насбкунӣ метавонад алоҳида ё бевосита ба кластери Kubernetes анҷом дода шавад, чун қоида, агар шумо якчанд кластерҳои Kubernetes дошта бошед, насб кардани он алоҳида осонтар хоҳад буд. Аз тарафи дигар, шумо ҳамеша метавонед истифода баред
Барои нигоҳ доштани маълумоти Keycloak ба шумо базаи маълумот лозим аст. Пешфарз аст h2
(тамоми маълумот ба таври маҳаллӣ нигоҳ дошта мешавад), аммо истифодаи он низ имконпазир аст postgres
, mysql
ё mariadb
.
Агар шумо ба ҳар ҳол қарор кунед, ки Keycloak-ро алоҳида насб кунед, шумо метавонед дастурҳои муфассалро дар ин ҷо пайдо кунед
Таъсиси федератсия
Пеш аз хама, биёед майдони нав созем. Realm фазои барномаи мост. Ҳар як барнома метавонад дорои доираи худ бо корбарони гуногун ва танзимоти авторизатсия бошад. Майдони асосӣ аз ҷониби худи Keycloak истифода мешавад ва истифодаи он барои ҳама чизи дигар нодуруст аст.
Дар ин ҷо зер кунед Майдон илова кунед
интихоб
арзиши
ном
kubernetes
Бозтоби ном
Kubernetes
Номи намоиши HTML
<img src="https://kubernetes.io/images/nav_logo.svg" width="400" >
Kubernetes бо нобаёнӣ тафтиш мекунад, ки почтаи электронии корбар тасдиқ шудааст ё не. Азбаски мо сервери LDAP-и худро истифода мебарем, ин чек қариб ҳамеша бармегардад false
. Биёед намояндагии ин танзимотро дар Kubernetes ғайрифаъол кунем:
Доираи муштарӣ -> Имейл -> Харитасозон -> почтаи электронӣ тасдиқ карда шуд (Нест кардан)
Акнун биёед федератсияро ташкил кунем, барои ин мо меравем:
Федератсияи корбарон -> Иловаи провайдер… -> лдап
Дар ин ҷо як намунаи насб барои FreeIPA:
интихоб
арзиши
Номи намоиши консол
freeipa.example.org
Соҳибкор
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 мо сохта шавад.
Дар сурати Active Directory, танҳо интихоб кунед Фурӯшанда: Directory Active ва танзимоти зарурӣ ба шакл ба таври худкор ворид карда мешаванд.
Дар ин ҷо зер кунед Захира
Акнун биёед идома диҳем:
Федератсияи корбарон -> 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
Ин танзими федератсияро ба анҷом мерасонад, биёед ба танзими муштарӣ гузарем.
Танзимоти муштарӣ
Биёед муштарии нав эҷод кунем (барномае, ки корбаронро аз Keycloak қабул мекунад). Рафтем:
мизоҷони -> сохтан
интихоб
арзиши
ID муштарӣ
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
Биёед тела диҳем наҷот ва ин танзимоти муштариро, ҳоло дар ҷадвал ба анҷом мерасонад
мизоҷони -> кубернетҳо -> Шаҳодатномаҳо
ба даст оварда метавонед пинҳонӣ ки мо баъдтар истифода мебарем.
Танзими Kubernetes
Насб кардани Kubernetes барои иҷозати OIDC хеле ночиз аст ва чизи хеле мураккаб нест. Ба шумо танҳо лозим аст, ки сертификати CA-и сервери OIDC-и худро ба он гузоред /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
...
Ин танзимоти Kubernetes -ро анҷом медиҳад. Шумо метавонед ин қадамҳоро дар тамоми кластерҳои Kubernetes такрор кунед.
Иҷозатномаи ибтидоӣ
Пас аз ин қадамҳо, шумо аллакай кластери Kubernetes бо иҷозати OIDC танзим карда мешавад. Ягона нукта дар он аст, ки корбарони шумо то ҳол муштарӣ ва инчунин 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 дар инҷо пайдо кардан мумкин аст
Танзими аут-прокси
Лоиҳаи аҷибе вуҷуд дорад
панели-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
Манбаъ: will.com