یہ مضمون پہلے ہی پر وسعت کے لیے لکھا گیا ہے۔
اس آرٹیکل میں میں آپ کو بتاؤں گا کہ انسٹال اور کنفیگر کیسے کریں:
- چابی کی چادر ایک اوپن سورس پروجیکٹ ہے۔ جو درخواستوں کے لیے داخلے کا ایک پوائنٹ فراہم کرتا ہے۔ بہت سے پروٹوکولز کے ساتھ کام کرتا ہے، بشمول LDAP اور OpenID جس میں ہماری دلچسپی ہے۔
- چابی کی چادر والا دربان - ریورس پراکسی ایپلی کیشن جو آپ کو کیکلوک کے ذریعے اجازت کو مربوط کرنے کی اجازت دیتی ہے۔
- گنگو - ایک ایپلی کیشن جو kubectl کے لیے ایک کنفیگریشن تیار کرتی ہے جس کے ساتھ آپ اوپن آئی ڈی کے ذریعے لاگ ان اور کوبرنیٹس API سے جڑ سکتے ہیں۔
کبرنیٹس میں اجازتیں کیسے کام کرتی ہیں۔
ہم RBAC کا استعمال کرتے ہوئے صارف/گروپ کے حقوق کا انتظام کر سکتے ہیں، اس بارے میں پہلے ہی مضامین کا ایک گروپ بنایا جا چکا ہے، میں اس پر تفصیل سے بات نہیں کروں گا۔ مسئلہ یہ ہے کہ آپ صارف کے حقوق کو محدود کرنے کے لیے RBAC کا استعمال کر سکتے ہیں، لیکن Kubernetes صارفین کے بارے میں کچھ نہیں جانتا۔ یہ پتہ چلتا ہے کہ ہمیں Kubernetes میں صارف کی ترسیل کے طریقہ کار کی ضرورت ہے۔ ایسا کرنے کے لیے، ہم 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 کنٹرولر کے لیے استعمال کریں گے۔
کی کلوک کی تنصیب
میں نے فیصلہ کیا کہ سب سے آسان طریقہ یہ ہے کہ اس کے لیے ریڈی میڈ حل استعمال کیے جائیں، یعنی ہیلم چارٹس۔
ذخیرہ کو انسٹال کریں اور اسے اپ ڈیٹ کریں:
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
صارف کے ای میل کی توثیق کو غیر فعال کریں:
کلائنٹ کے دائرہ کار —> ای میل —> میپرز —> ای میل تصدیق شدہ (حذف کریں)
ہم نے ActiveDirectory سے صارفین کو درآمد کرنے کے لیے فیڈریشن قائم کیا، میں ذیل میں اسکرین شاٹس چھوڑوں گا، میرے خیال میں یہ واضح ہو جائے گا۔
صارف فیڈریشن —> فراہم کنندہ شامل کریں… —> ldap
فیڈریشن سیٹ اپ
اگر سب ٹھیک ہے تو بٹن دبانے کے بعد تمام صارفین کو سنکرونائز کریں۔ آپ کو صارفین کی کامیاب درآمد کے بارے میں ایک پیغام نظر آئے گا۔
اگلا ہمیں اپنے گروپس کا نقشہ بنانے کی ضرورت ہے۔
یوزر فیڈریشن --> ldap_localhost --> میپرز --> تخلیق کریں۔
میپر بنانا
کلائنٹ سیٹ اپ
ایک کلائنٹ بنانا ضروری ہے، Keycloak کے لحاظ سے، یہ ایک ایسی درخواست ہے جو اس کی طرف سے اختیار کی جائے گی۔ میں سرخ رنگ میں اسکرین شاٹ میں اہم نکات کو اجاگر کروں گا۔
کلائنٹ -> تخلیق کریں۔
کلائنٹ سیٹ اپ
آئیے گروپس کے لیے سکوپ بناتے ہیں:
کلائنٹ کے دائرہ کار -> تخلیق کریں۔
دائرہ کار بنائیں
اور ان کے لیے میپر مرتب کریں:
کلائنٹ کے دائرہ کار —> گروپس —> میپرز —> تخلیق کریں۔
میپر
ہمارے گروپس کی میپنگ کو ڈیفالٹ کلائنٹ اسکوپس میں شامل کریں:
کلائنٹس —> kubernetes —> کلائنٹ اسکوپس —> ڈیفالٹ کلائنٹ اسکوپس
منتخب کریں گروہوں в دستیاب کلائنٹ کے دائرہ کار، دبائیں منتخب شامل کریں۔
ہمیں راز ملتا ہے (اور اسے تھریڈ پر لکھتے ہیں) جسے ہم Keycloak میں اجازت کے لیے استعمال کریں گے:
کلائنٹس —> kubernetes —> اسناد —> خفیہ
یہ سیٹ اپ کو مکمل کرتا ہے، لیکن مجھے ایک خامی تھی جب، کامیاب اجازت کے بعد، مجھے ایک غلطی 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
...
auth-proxy سیٹ کرنا
آپ اپنی ویب ایپلیکیشن کی حفاظت کے لیے کی کلوک گیٹ کیپر استعمال کر سکتے ہیں۔ اس حقیقت کے علاوہ کہ یہ ریورس پراکسی صفحہ دکھانے سے پہلے صارف کو اجازت دے گی، یہ آپ کے بارے میں معلومات کو ہیڈرز میں آخری ایپلیکیشن تک بھی دے گی۔ اس طرح، اگر آپ کی ایپلیکیشن OpenID کو سپورٹ کرتی ہے، تو صارف کو فوری طور پر اجازت مل جاتی ہے۔ Kubernetes ڈیش بورڈ کی مثال پر غور کریں۔
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
کی کلوک گیٹ کیپر انسٹال کریں:
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"
اس کے بعد جب آپ جانے کی کوشش کریں۔
گینگ وے کی تنصیب
سہولت کے لیے، آپ ایک گینگ وے شامل کر سکتے ہیں جو 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