هي مضمون اڳ ۾ ئي وڌائڻ لاء لکيو ويو آهي
هن آرٽيڪل ۾ آئون توهان کي ٻڌايان ٿو ته ڪيئن انسٽال ۽ ترتيب ڏيڻ:
- چاٻي هڪ اوپن سورس پروجيڪٽ آهي. جيڪو ايپليڪيشنن لاءِ داخلا جو هڪ واحد نقطو مهيا ڪري ٿو. ڪيترن ئي پروٽوڪولن سان ڪم ڪري ٿو، بشمول LDAP ۽ OpenID جنهن ۾ اسان دلچسپي رکون ٿا.
- چاٻي جو دربان - ريورس پراکسي ايپليڪيشن جيڪا توهان کي اجازت ڏئي ٿي ڪيڪلوڪ ذريعي اختيار کي ضم ڪرڻ.
- گنگا وي - هڪ ايپليڪيشن جيڪا kubectl لاءِ هڪ ترتيب ٺاهي ٿي جنهن سان توهان لاگ ان ڪري سگهو ٿا ۽ OpenID ذريعي Kubernetes API سان ڳنڍي سگهو ٿا.
ڪبرنيٽس ۾ اجازتون ڪيئن ڪم ڪن ٿيون.
اسان RBAC استعمال ڪندي صارف / گروپ جي حقن کي منظم ڪري سگھون ٿا، ان بابت اڳ ۾ ئي آرٽيڪل جو هڪ گروپ ٺاهيو ويو آهي، مان ان تي تفصيل سان نه ڳالهائيندس. مسئلو اهو آهي ته توهان صارف جي حقن کي محدود ڪرڻ لاءِ RBAC استعمال ڪري سگهو ٿا، پر ڪبرنيٽس کي صارفين جي باري ۾ ڪا به خبر ناهي. اهو ظاهر ٿئي ٿو ته اسان کي ڪبرنيٽس ۾ صارف جي ترسيل ميڪانيزم جي ضرورت آهي. هن کي ڪرڻ لاء، اسان Kuberntes OpenID ۾ هڪ مهيا ڪندڙ شامل ڪنداسين، جيڪو چوندو ته اهڙي صارف واقعي موجود آهي، ۽ Kubernetes پاڻ کيس حق ڏيندو.
جي تياري
- توهان کي ڪبرنيٽس ڪلستر يا منيڪوب جي ضرورت پوندي
- فعال ڊاريڪٽري
- ڊومين:
keycloak.example.org
kubernetes-dashboard.example.org
gangway.example.org - ڊومينز لاءِ سرٽيفڪيٽ يا خود دستخط ٿيل سرٽيفڪيٽ
مان ان ڳالهه تي غور نه ڪندس ته ڪيئن ٺاهيو پاڻمرادو دستخط ٿيل سرٽيفڪيٽ، توهان کي 2 سرٽيفڪيٽ ٺاهڻ گهرجن، هي آهي روٽ (سرٽيفڪيٽ اٿارٽي) ۽ وائلڊ ڪارڊ ڪلائنٽ لاءِ *.example.org ڊومين
توھان کان پوءِ سرٽيفڪيٽ حاصل ڪرڻ / جاري ڪرڻ کان پوءِ، ڪلائنٽ کي Kubernetes ۾ شامل ڪيو وڃي، ان لاءِ اسان ان لاءِ راز ٺاھيون ٿا:
kubectl create secret tls tls-keycloak --cert=example.org.crt --key=example.org.pem
اڳيون، اسان ان کي استعمال ڪنداسين اسان جي Ingress ڪنٽرولر لاء.
Keycloak لڳائڻ
مون فيصلو ڪيو ته ان لاءِ تيار ڪيل حل استعمال ڪرڻ جو آسان طريقو آهي، يعني هيلم چارٽس.
مخزن کي انسٽال ڪريو ۽ ان کي اپڊيٽ ڪريو:
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
وفاق جي جوڙجڪ
اڳيون، ويب انٽرفيس ڏانھن وڃو
کاٻي ڪنڊ ۾ ڪلڪ ڪريو علائقو شامل ڪريو
چاٻي
قدر
نالو
ڪبرنيٽ
نالي جو نالو
ڪوبنيٿس
صارف جي اي ميل جي تصديق کي بند ڪريو:
ڪلائنٽ اسڪوپس -> اي ميل -> ميپرز -> اي ميل تصديق ٿيل (خارج ڪريو)
اسان ActiveDirectory مان صارفين کي درآمد ڪرڻ لاءِ فيڊريشن قائم ڪيو، مان هيٺ اسڪرين شاٽ ڇڏيندس، مان سمجهان ٿو ته اهو واضح ٿي ويندو.
يوزر فيڊريشن -> فراهم ڪندڙ شامل ڪريو... -> ldap
وفاق جي جوڙجڪ
جيڪڏهن سڀ ٺيڪ آهي، پوء بٽڻ کي دٻائڻ کان پوء سڀني صارفين کي هم وقت سازي ڪريو توهان صارفين جي ڪامياب درآمد بابت هڪ پيغام ڏسندا.
اڳيون اسان کي اسان جي گروپن کي نقشي ڪرڻ جي ضرورت آهي
يوزر فيڊريشن --> ldap_localhost --> Mappers --> Create
نقش نگاري ٺاهڻ
ڪسٽمر سيٽ اپ
اهو ضروري آهي ته هڪ ڪلائنٽ ٺاهيو، 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();
Kubernetes ترتيب ڏيڻ
اسان کي بيان ڪرڻ جي ضرورت آهي ته اسان جي روٽ سرٽيفڪيٽ سائيٽ مان ڪٿي آهي، ۽ OIDC فراهم ڪندڙ ڪٿي واقع آهي.
ائين ڪرڻ لاءِ، فائل کي ايڊٽ ڪريو /etc/kubernetes/manifests/kube-apiserver.yaml
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 config کي اپڊيٽ ڪريو:
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
...
تصنيف پراڪسي ترتيب ڏيڻ
توھان استعمال ڪري سگھو ٿا keycloak gatekeper to protect your web application. انهي حقيقت کان علاوه ته هي ريورس پراکسي صارف کي اجازت ڏيندو ته صفحو ڏيکارڻ کان اڳ، اهو پڻ توهان جي باري ۾ معلومات کي هيڊر ۾ آخري ايپليڪيشن تائين پهچائيندو. اهڙيء طرح، جيڪڏهن توهان جي ايپليڪيشن OpenID کي سپورٽ ڪري ٿي، پوء صارف کي فوري طور تي مجاز آهي. ڪبرنيٽس ڊيش بورڊ جي مثال تي غور ڪريو
انسٽال ڪرڻ Kubernetes ڊيش بورڊ
helm install stable/kubernetes-dashboard --name dashboard -f values_dashboard.yaml
values_dashboard.yaml
enableInsecureLogin: true
service:
externalPort: 80
rbac:
clusterAdminRole: true
create: true
serviceAccount:
create: true
name: 'dashboard-test'
رسائي جا حق مقرر ڪرڻ:
اچو ته هڪ ClusterRoleBinding ٺاهيون جيڪو DataOPS گروپ ۾ استعمال ڪندڙن لاءِ ڪلسٽر منتظم حق (معياري ClusterRole cluster-admin) ڏيندو.
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
انسٽال ڪريو keycloak دربان:
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
values_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"
ان کان پوء، جڏھن اوھان کي وڃڻ جي ڪوشش ڪئي
gangway لڳائڻ
سهولت لاءِ، توهان هڪ گنگ وي شامل ڪري سگهو ٿا جيڪو kubectl لاءِ هڪ config فائل ٺاهيندو، جنهن جي مدد سان اسان پنهنجي صارف جي تحت Kubernetes ۾ حاصل ڪنداسين.
helm install --name gangway stable/gangway -f values_gangway.yaml
values_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