
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/freeipa.example.org@EXAMPLE.ORG
негізгі қойындысы:
/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 файлын жүктеп алуға болады. Ең қолайлыларының бірі , ол барлық Kubernetes кластерлерін бір конфигурацияда сипаттауға және олардың арасында оңай ауысуға мүмкіндік береді.
Kuberos конфигурациялау үшін kubeconfig үлгісін сипаттау және оны келесі параметрлермен іске қосу жеткілікті:
kuberos https://keycloak.example.org/auth/realms/kubernetes kubernetes /cfg/secret /cfg/templateҚосымша мәліметтер алу үшін қараңыз Github сайтында.
Оны пайдалану да мүмкін егер сіз пайдаланушының компьютерінде авторизация жасағыңыз келсе. Бұл жағдайда пайдаланушы localhost сайтында авторизация пішіні бар шолғышты ашады.
Алынған 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-adminsRBAC үшін қосымша мысалдарды мына жерден табуға болады
Auth-proxy орнату
Керемет жоба бар , ол пайдаланушыға OIDC серверіне аутентификациялауға мүмкіндік беру арқылы кез келген қолданбаны қорғауға мүмкіндік береді. Мен сізге мысал ретінде Kubernetes бақылау тақтасын пайдаланып оны қалай орнатуға болатынын көрсетемін:
бақылау тақтасы-прокси.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
