Kubernetes-ті LDAP серверіне қосу және пайдаланушылар мен топтарды импорттауды орнату үшін Keycloak қолданбасын пайдалану туралы шағын оқулық. Бұл пайдаланушыларыңыз үшін 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
Kerberos патшалығы:
EXAMPLE.ORG
Сервер директоры:
HTTP/[email protected]
негізгі қойындысы:
/etc/krb5.keytab
мүше keycloak-svc
LDAP серверінде алдын ала жасалуы керек.
Active Directory жағдайында сізге жай ғана таңдау керек Жеткізуші: Active Directory және қажетті параметрлер пішінге автоматты түрде енгізіледі.
Мұнда басыңыз сақтау
Енді жалғастырайық:
Пайдаланушылар федерациясы -> 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 пайдаланушыларын қабылдайтын қолданба) жасайық. Барайық:
клиенттер -> жасау
таңдау
құн
Тұтынушы идентификаторы
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 конфигурациялануда
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
Ақпарат көзі: www.habr.com