यह लेख पहले से ही विस्तार करने के लिए लिखा गया है
इस लेख में मैं आपको बताऊंगा कि कैसे स्थापित करें और कॉन्फ़िगर करें:
- चाबी का कपड़ा एक ओपन सोर्स प्रोजेक्ट है। जो अनुप्रयोगों के लिए प्रवेश का एकल बिंदु प्रदान करता है। एलडीएपी और ओपनआईडी समेत कई प्रोटोकॉल के साथ काम करता है जिसमें हम रूचि रखते हैं।
- चाभी का द्वारपाल - रिवर्स प्रॉक्सी एप्लिकेशन जो आपको कीक्लॉक के माध्यम से प्राधिकरण को एकीकृत करने की अनुमति देता है।
- गैगवे - एक एप्लिकेशन जो kubectl के लिए एक कॉन्फ़िगरेशन उत्पन्न करता है जिसके साथ आप लॉग इन कर सकते हैं और OpenID के माध्यम से Kubernetes API से जुड़ सकते हैं।
कुबेरनेट्स में अनुमतियाँ कैसे काम करती हैं।
हम RBAC का उपयोग करके उपयोगकर्ता / समूह अधिकारों का प्रबंधन कर सकते हैं, इस बारे में लेखों का एक समूह पहले ही बनाया जा चुका है, मैं इस पर विस्तार से ध्यान नहीं दूंगा। समस्या यह है कि आप उपयोगकर्ता अधिकारों को प्रतिबंधित करने के लिए RBAC का उपयोग कर सकते हैं, लेकिन Kubernetes उपयोगकर्ताओं के बारे में कुछ नहीं जानता। यह पता चला है कि हमें कुबेरनेट्स में उपयोगकर्ता वितरण तंत्र की आवश्यकता है। ऐसा करने के लिए, हम कुबेरनेट्स ओपनआईडी में एक प्रदाता जोड़ेंगे, जो कहेगा कि ऐसा उपयोगकर्ता वास्तव में मौजूद है, और कुबेरनेट्स स्वयं उसे अधिकार देंगे।
ट्रेनिंग
- आपको कुबेरनेट क्लस्टर या मिनीक्यूब की आवश्यकता होगी
- सक्रिय निर्देशिका
- डोमेन:
keycloak.example.org
कुबेरनेट्स-dashboard.example.org
गैंगवे.example.org - डोमेन या स्व-हस्ताक्षरित प्रमाणपत्र के लिए प्रमाणपत्र
मैं स्व-हस्ताक्षरित प्रमाणपत्र बनाने के तरीके पर ध्यान नहीं दूंगा, आपको 2 प्रमाणपत्र बनाने की आवश्यकता है, यह *.example.org डोमेन के लिए रूट (प्रमाणपत्र प्राधिकरण) और वाइल्डकार्ड क्लाइंट है
आपके द्वारा प्रमाणपत्र प्राप्त / जारी करने के बाद, क्लाइंट को कुबेरनेट्स में जोड़ा जाना चाहिए, इसके लिए हम इसके लिए एक रहस्य बनाते हैं:
kubectl create secret tls tls-keycloak --cert=example.org.crt --key=example.org.pem
अगला, हम इसे अपने इनग्रेड कंट्रोलर के लिए उपयोग करेंगे।
चाभी की स्थापना
मैंने फैसला किया कि सबसे आसान तरीका इसके लिए तैयार किए गए समाधानों का उपयोग करना है, अर्थात् हेल्म चार्ट।
रिपॉजिटरी स्थापित करें और इसे अपडेट करें:
helm repo add codecentric https://codecentric.github.io/helm-charts
helm repo update
निम्नलिखित सामग्री के साथ एक keycloak.yml फ़ाइल बनाएँ:
keycloak.yml
keycloak:
# Имя администратора
username: "test_admin"
# Пароль администратор
password: "admin"
# Эти флаги нужны что бы позволить загружать в Keycloak скрипты прямо через web морду. Это нам
понадобиться что бы починить один баг, о котором ниже.
extraArgs: "-Dkeycloak.profile.feature.script=enabled -Dkeycloak.profile.feature.upload_scripts=enabled"
# Включаем ingress, указываем имя хоста и сертификат который мы предварительно сохранили в secrets
ingress:
enabled: true
path: /
annotations:
kubernetes.io/ingress.class: nginx
ingress.kubernetes.io/affinity: cookie
hosts:
- keycloak.example.org
tls:
- hosts:
- keycloak.example.org
secretName: tls-keycloak
# Keycloak для своей работы требует базу данных, в тестовых целях я разворачиваю Postgresql прямо в Kuberntes, в продакшене так лучше не делать!
persistence:
deployPostgres: true
dbVendor: postgres
postgresql:
postgresUser: keycloak
postgresPassword: ""
postgresDatabase: keycloak
persistence:
enabled: true
फेडरेशन की स्थापना
अगला, वेब इंटरफेस पर जाएं
बाएँ कोने में क्लिक करें क्षेत्र जोड़ें
कुंजी
वैल्यू
नाम
Kubernetes
प्रदर्शन नाम
Kubernetes
उपयोगकर्ता ईमेल सत्यापन अक्षम करें:
क्लाइंट स्कोप —> ईमेल —> मैपर्स —> ईमेल सत्यापित (हटाएं)
हमने उपयोगकर्ताओं को ActiveDirectory से आयात करने के लिए फेडरेशन की स्थापना की, मैं नीचे स्क्रीनशॉट छोड़ दूंगा, मुझे लगता है कि यह स्पष्ट होगा।
उपयोगकर्ता संघ -> प्रदाता जोड़ें... -> ldap
फेडरेशन की स्थापना
अगर सब ठीक रहा तो बटन दबाने के बाद सभी उपयोगकर्ताओं को सिंक्रनाइज़ करें आप उपयोगकर्ताओं के सफल आयात के बारे में एक संदेश देखेंगे।
आगे हमें अपने समूहों को मैप करने की आवश्यकता है
यूजर फेडरेशन--> ldap_localhost--> मैपर्स-> क्रिएट करें
मैपर बनाना
क्लाइंट सेटअप
क्लाइंट बनाना आवश्यक है, कीक्लोक के संदर्भ में, यह एक ऐसा एप्लिकेशन है जो उससे अधिकृत होगा। मैं स्क्रीनशॉट में महत्वपूर्ण बिंदुओं को लाल रंग में हाइलाइट करूंगा।
ग्राहक -> बनाएँ
क्लाइंट सेटअप
आइए समूहों के लिए स्कूप बनाएं:
क्लाइंट स्कोप -> बनाएँ
गुंजाइश बनाएँ
और उनके लिए मैपर सेट अप करें:
क्लाइंट स्कोप्स -> समूह -> मैपर्स -> बनाएं
नक्शाकार
हमारे समूहों की मैपिंग को डिफ़ॉल्ट क्लाइंट स्कोप में जोड़ें:
ग्राहक-> कुबेरनेट्स-> क्लाइंट स्कोप-> डिफ़ॉल्ट क्लाइंट स्कोप
चुनना समूहों в उपलब्ध क्लाइंट स्कोप, प्रेस चुने हुए को जोड़ो
हम रहस्य प्राप्त करते हैं (और इसे थ्रेड पर लिखते हैं) जिसे हम Keycloak में प्राधिकरण के लिए उपयोग करेंगे:
ग्राहक -> कुबेरनेट्स -> क्रेडेंशियल्स -> गुप्त
यह सेटअप पूर्ण करता है, लेकिन सफल प्राधिकरण के बाद, जब मुझे 403 त्रुटि प्राप्त हुई, तो मुझे एक त्रुटि हुई।
हल करना:
क्लाइंट स्कोप्स -> भूमिकाएँ -> मैपर्स -> बनाएँ
नक्शाकार
स्क्रिप्ट कोड
// add current client-id to token audience
token.addAudience(token.getIssuedFor());
// return token issuer as dummy result assigned to iss again
token.getIssuer();
कुबेरनेट्स को कॉन्फ़िगर करना
हमें यह निर्दिष्ट करने की आवश्यकता है कि साइट से हमारा मूल प्रमाणपत्र कहाँ है, और OIDC प्रदाता कहाँ स्थित है।
ऐसा करने के लिए, /etc/kubernetes/manifests/kube-apiserver.yaml फ़ाइल संपादित करें
क्यूब-एपिसर्वर.यामल
...
spec:
containers:
- command:
- kube-apiserver
...
- --oidc-ca-file=/var/lib/minikube/certs/My_Root.crt
- --oidc-client-id=kubernetes
- --oidc-groups-claim=groups
- --oidc-issuer-url=https://keycloak.example.org/auth/realms/kubernetes
- --oidc-username-claim=email
...
क्लस्टर में kubeadm कॉन्फ़िगरेशन अपडेट करें:
kubeadmconfig
kubectl edit -n kube-system configmaps kubeadm-config
...
data:
ClusterConfiguration: |
apiServer:
extraArgs:
oidc-ca-file: /var/lib/minikube/certs/My_Root.crt
oidc-client-id: kubernetes
oidc-groups-claim: groups
oidc-issuer-url: https://keycloak.example.org/auth/realms/kubernetes
oidc-username-claim: email
...
प्राधिकरण-प्रॉक्सी सेट करना
आप अपने वेब एप्लिकेशन की सुरक्षा के लिए कीक्लोक गेटकीपर का उपयोग कर सकते हैं। इस तथ्य के अलावा कि यह रिवर्स प्रॉक्सी पृष्ठ दिखाने से पहले उपयोगकर्ता को अधिकृत करेगा, यह आपके बारे में हेडर में अंतिम एप्लिकेशन को भी जानकारी देगा। इस प्रकार, यदि आपका एप्लिकेशन ओपनआईडी का समर्थन करता है, तो उपयोगकर्ता को तुरंत अधिकृत किया जाता है। कुबेरनेट्स डैशबोर्ड के उदाहरण पर विचार करें
कुबेरनेट्स डैशबोर्ड स्थापित करना
helm install stable/kubernetes-dashboard --name dashboard -f values_dashboard.yaml
value_dashboard.yaml
enableInsecureLogin: true
service:
externalPort: 80
rbac:
clusterAdminRole: true
create: true
serviceAccount:
create: true
name: 'dashboard-test'
पहुँच अधिकार सेट करना:
चलिए एक ClusterRoleBinding बनाते हैं जो DataOPS समूह में उपयोगकर्ताओं के लिए क्लस्टर व्यवस्थापक अधिकार (मानक ClusterRole क्लस्टर-व्यवस्थापक) प्रदान करेगा।
kubectl apply -f rbac.yaml
rbac.yaml
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: dataops_group
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: cluster-admin
subjects:
- apiGroup: rbac.authorization.k8s.io
kind: Group
name: DataOPS
कीक्लोक गेटकीपर स्थापित करें:
helm repo add gabibbo97 https://gabibbo97.github.io/charts/
helm repo update
helm install gabibbo97/keycloak-gatekeeper --version 2.1.0 --name keycloak-gatekeeper -f values_proxy.yaml
value_proxy.yaml
# Включаем ingress
ingress:
enabled: true
annotations:
kubernetes.io/ingress.class: nginx
path: /
hosts:
- kubernetes-dashboard.example.org
tls:
- secretName: tls-keycloak
hosts:
- kubernetes-dashboard.example.org
# Говорим где мы будем авторизовываться у OIDC провайдера
discoveryURL: "https://keycloak.example.org/auth/realms/kubernetes"
# Имя клиента которого мы создали в Keycloak
ClientID: "kubernetes"
# Secret который я просил записать
ClientSecret: "c6ec03b8-d0b8-4cb6-97a0-03becba1d727"
# Куда перенаправить в случае успешной авторизации. Формат <SCHEMA>://<SERVICE_NAME>.><NAMESAPCE>.<CLUSTER_NAME>
upstreamURL: "http://dashboard-kubernetes-dashboard.default.svc.cluster.local"
# Пропускаем проверку сертификата, если у нас самоподписанный
skipOpenidProviderTlsVerify: true
# Настройка прав доступа, пускаем на все path если мы в группе DataOPS
rules:
- "uri=/*|groups=DataOPS"
उसके बाद जब आप जाने की कोशिश करेंगे
गैंगवे स्थापना
सुविधा के लिए, आप एक गैंगवे जोड़ सकते हैं जो कुबेक्टल के लिए एक कॉन्फ़िग फ़ाइल उत्पन्न करेगा, जिसकी सहायता से हम अपने उपयोगकर्ता के तहत कुबेरनेट्स में प्रवेश करेंगे।
helm install --name gangway stable/gangway -f values_gangway.yaml
value_gangway.yaml
gangway:
# Произвольное имя кластера
clusterName: "my-k8s"
# Где у нас OIDC провайдер
authorizeURL: "https://keycloak.example.org/auth/realms/kubernetes/protocol/openid-connect/auth"
tokenURL: "https://keycloak.example.org/auth/realms/kubernetes/protocol/openid-connect/token"
audience: "https://keycloak.example.org/auth/realms/kubernetes/protocol/openid-connect/userinfo"
# Теоритически сюда можно добавить groups которые мы замапили
scopes: ["openid", "profile", "email", "offline_access"]
redirectURL: "https://gangway.example.org/callback"
# Имя клиента
clientID: "kubernetes"
# Секрет
clientSecret: "c6ec03b8-d0b8-4cb6-97a0-03becba1d727"
# Если оставить дефолтное значние, то за имя пользователя будет братья <b>Frist name</b> <b>Second name</b>, а при "sub" его логин
usernameClaim: "sub"
# Доменное имя или IP адресс API сервера
apiServerURL: "https://192.168.99.111:8443"
# Включаем Ingress
ingress:
enabled: true
annotations:
kubernetes.io/ingress.class: nginx
nginx.ingress.kubernetes.io/proxy-buffer-size: "64k"
path: /
hosts:
- gangway.example.org
tls:
- secretName: tls-keycloak
hosts:
- gangway.example.org
# Если используем самоподписанный сертификат, то его(открытый корневой сертификат) надо указать.
trustedCACert: |-
-----BEGIN CERTIFICATE-----
MIIDVzCCAj+gAwIBAgIBATANBgkqhkiG9w0BAQsFADA1MQswCQYDVQQGEwJVUzEQMA4GA1UEChMHRGF0YU9QUzEUMBIGA1UEAxMLbXkgcm9vdCBrZXkwHhcNMjAwMjE0MDkxODAwWhcNMzAwMjE0MDkxODAwWjA1MQswCQYDVQQGEwJVUzEQMA4GA1UEChMHRGF0YU9QUzEUMBIGA1UEAxMLbXkgcm9vdCBrZXkwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDyP749PqqIRwNSqaK6qr0Zsi03G4PTCUlgaYTPZuMrwUVPK8xX2dWWs9MPRMOdXpgr8aSTZnVfmelIlVz4D7o2vK5rfmAe9GPcK0WbwKwXyhFU0flS9sU/g46ogHFrk03SZxQAeJhMLfEmAJm8LF5HghtGDs3t4uwGsB95o+lqPLiBvxRB8ZS3jSpYpvPgXAuZWKdZUQ3UUZf0X3hGLp7uIcIwJ7i4MduOGaQEO4cePeEJy9aDAO6qV78YmHbyh9kaW+1DL/Sgq8NmTgHGV6UOnAPKHTnMKXl6KkyUz8uLBGIdVhPxrlzG1EzXresJbJenSZ+FZqm3oLqZbw54Yp5hAgMBAAGjcjBwMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFHISTOU/6BQqqnOZj+1xJfxpjiG0MAsGA1UdDwQEAwIBBjARBglghkgBhvhCAQEEBAMCAAcwHgYJYIZIAYb4QgENBBEWD3hjYSBjZXJ0aWZpY2F0ZTANBgkqhkiG9w0BAQsFAAOCAQEAj7HC8ObibwOLT4ZYmISJZwub9lcE0AZ5cWkPW39j/syhdbbqjK/6jy2D3WUEbR+s1Vson5Ov7JhN5In2yfZ/ByDvBnoj7CP8Q/ZMjTJgwN7j0rgmEb3CTZvnDPAz8Ijw3FP0cjxfoZ1Z0V2F44Ry7gtLJWr06+MztXVyto3aIz1/XbMQnXYlzc3c3B5yUQIy44Ce5aLRVsAjmXNqVRmDJ2QPNLicvrhnUJsO0zFWI+zZ2hc4Ge1RotCrjfOc9hQY63jZJ17myCZ6QCD7yzMzAob4vrgmkD4q7tpGrhPY/gDcE+lUNhC7DO3l0oPy2wsnT2TEn87eyWmDiTFG9zWDew==
-----END CERTIFICATE-----
इस तरह दिखता है। आपको कॉन्फ़िगरेशन फ़ाइल को तुरंत डाउनलोड करने और आदेशों के एक सेट का उपयोग करके इसे उत्पन्न करने की अनुमति देता है:
स्रोत: www.habr.com