Kubernetesти LDAP сервериңизге туташтыруу жана колдонуучулардын жана топтордун импортун конфигурациялоо үчүн Keycloak кантип колдонсоңуз болору боюнча кыскача окуу куралы. Бул сизге RBACти колдонуучуларыңыз үчүн конфигурациялоого жана Kubernetes Dashboard жана өздөрүн аутентификациялай албаган башка колдонмолорду коргоо үчүн аутентификациялык проксиди колдонууга мүмкүндүк берет.
Keycloak орнотуу
Келиңиз, сизде LDAP сервери бар деп коёлу. Бул Active Directory, FreeIPA, OpenLDAP же башка нерсе болушу мүмкүн. Эгерде сизде LDAP сервери жок болсо, анда сиз колдонуучуларды түздөн-түз Keycloak интерфейсинде түзө аласыз же коомдук oidc провайдерлерин (Google, Github, Gitlab) колдоно аласыз, натыйжа дээрлик бирдей болот.
Биринчиден, Keycloakтин өзүн орнотуп алалы. Орнотуу өзүнчө же түздөн-түз Kubernetes кластеринде аткарылышы мүмкүн. Эреже катары, бир нече Kubernetes кластериңиз болсо, аны өзүнчө орнотуу оңой болмок. Башка жагынан алганда, сиз ар дайым колдоно аласыз
Keycloak маалыматтарын сактоо үчүн сизге маалымат базасы керек болот. Демейки болуп саналат h2
(бардык маалыматтар жергиликтүү сакталат), бирок аны колдонууга да болот postgres
, mysql
же mariadb
.
Эгер сиз дагы эле Keycloakти өзүнчө орнотууну чечсеңиз, анда кененирээк нускамаларды таба аласыз
Федерацияны түзүү
Биринчиден, жаңы чөйрөнү түзөлү. Realm - бул биздин колдонмонун мейкиндиги. Ар бир колдонмо ар кандай колдонуучулар жана авторизация орнотуулары менен өз чөйрөсүнө ээ болушу мүмкүн. Master чөйрөсүн 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
Bind DN
uid=keycloak-svc,cn=users,cn=accounts,dc=example,dc=org
Байланыш маалымат
<password>
Kerberos аутентификациясына уруксат берүү:
on
Kerberos Realm:
EXAMPLE.ORG
Сервердин директору:
HTTP/[email protected]
KeyTab:
/etc/krb5.keytab
мүчө keycloak-svc
LDAP серверибизде алдын ала түзүлүшү керек.
Active Directory учурда, сиз жөн гана тандоо керек Сатуучу: Active Directory жана керектүү орнотуулар формага автоматтык түрдө киргизилет.
басма сөз Сактоо
Эми уланталы:
Колдонуучулардын федерациясы -> freeipa.example.org -> Картачылар -> Биринчи аты
тандоо
маани
Ldap атрибуту
givenName
Эми топтун картасын иштетели:
Колдонуучулардын федерациясы -> freeipa.example.org -> Картачылар -> түзүү
тандоо
маани
ысым
groups
Картачтын түрү
group-ldap-mapper
LDAP Groups DN
cn=groups,cn=accounts,dc=example,dc=org
Колдонуучу топторунун алуу стратегиясы
GET_GROUPS_FROM_USER_MEMBEROF_ATTRIBUTE
Эми федерацияны орнотуу аяктагандан кийин, кардарды орнотууга өтөлү.
Кардар орнотуу
Келгиле, жаңы кардарды түзөлү (Keycloak колдонуучуларын кабыл ала турган тиркеме). Улантайлы:
Кардарлар -> түзүү
тандоо
маани
Кардардын ID
kubernetes
Кирүү түрү
confidenrial
Root URL
http://kubernetes.example.org/
Жарактуу Redirect URI'лери
http://kubernetes.example.org/*
Админ URL
http://kubernetes.example.org/
Келгиле, топтор үчүн аймакты түзөлү:
Client Scopes -> түзүү
тандоо
маани
Калып
No template
ысым
groups
Толук топ жолу
false
Жана алар үчүн карта түзүүчүнү орнотуңуз:
Client Scopes -> топтор -> Картачылар -> түзүү
тандоо
маани
ысым
groups
Картачынын түрү
Group membership
Токен доо аты
groups
Эми биз кардарлардын чөйрөсүндө карта тобун иштетишибиз керек:
Кардарлар -> kubernetes -> Client Scopes -> Демейки кардар чөйрөлөрү
тандоо топтор в Жеткиликтүү кардар чөйрөлөрүчыкылдатуу Тандалган кошуу
Эми биздин колдонмонун аутентификациясын конфигурациялайлы, өтүңүз:
Кардарлар -> kubernetes
тандоо
маани
Авторизация иштетилген
ON
басалы куткаруу жана муну менен кардар орнотуу аяктады, азыр өтмөктө
Кардарлар -> kubernetes -> ишеним грамоталары
ала аласыз сыр аны биз мындан ары колдонобуз.
Kubernetes конфигурацияланууда
OIDC авторизациясы үчүн Kubernetes орнотуу өтө маанилүү жана өтө татаал эмес. Болгону 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
...
Бул Kubernetes орнотуусун аяктайт. Бул кадамдарды бардык Kubernetes кластерлериңизде кайталасаңыз болот.
Баштапкы уруксат
Бул кадамдардан кийин сизде конфигурацияланган 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 орнотуу
Керемет проект бар
башкаруу панели-прокси.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
Source: www.habr.com