ይህ ጽሑፍ የተፃፈው ቀደም ሲል የነበረውን ለማስፋት ነው።
በዚህ ጽሑፍ ውስጥ እንዴት መጫን እና ማዋቀር እንደሚችሉ እነግርዎታለሁ-
- ቁልፍ ካባ ክፍት ምንጭ ፕሮጀክት ነው። ለመተግበሪያዎች አንድ ነጠላ ነጥብ የሚያቀርበው። እኛ የምንፈልገውን LDAP እና OpenIDን ጨምሮ ከብዙ ፕሮቶኮሎች ጋር ይሰራል።
- ቁልፍ ካባ በረኛ - ፈቃድን በ Keycloak በኩል እንዲያዋህዱ የሚያስችልዎ የተገላቢጦሽ ፕሮክሲ መተግበሪያ።
- ጋንግዌይ - ለ kubectl ውቅረት የሚያመነጭ መተግበሪያ በ OpenID በኩል ከኩበርኔትስ ኤፒአይ ጋር ገብተው መገናኘት ይችላሉ።
ፈቃዶች በኩበርኔትስ ውስጥ እንዴት እንደሚሠሩ።
RBAC ን በመጠቀም የተጠቃሚ / የቡድን መብቶችን ማስተዳደር እንችላለን ፣ ስለዚህ ጉዳይ ብዙ መጣጥፎች ተፈጥረዋል ፣ በዚህ ላይ በዝርዝር አልቀመጥም። ችግሩ የተጠቃሚ መብቶችን ለመገደብ RBAC ን መጠቀም ትችላለህ ነገር ግን Kubernetes ስለተጠቃሚዎች ምንም የሚያውቀው ነገር የለም። በ Kubernetes ውስጥ የተጠቃሚ ማቅረቢያ ዘዴን እንፈልጋለን። ይህንን ለማድረግ አቅራቢን ወደ Kuberntes OpenID እንጨምራለን, እሱም እንደዚህ አይነት ተጠቃሚ በእርግጥ እንዳለ ይናገራል, እና Kubernetes እራሱ መብቶቹን ይሰጠዋል.
ዝግጅት
- የኩበርኔትስ ክላስተር ወይም ሚኒኩቤ ያስፈልግዎታል
- የ Active Directory
- ጎራዎች፡
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 በማዋቀር ላይ
የእኛ ስርወ ሰርተፊኬት ከጣቢያው የት እንደሚገኝ እና የኦኢዲሲ አገልግሎት አቅራቢው የት እንደሚገኝ መግለፅ አለብን።
ይህንን ለማድረግ ፋይሉን ያርትዑ /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 ውቅረት ያዘምኑ፡-
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
...
ኦውዝ-ተኪን በማዘጋጀት ላይ
የድር መተግበሪያህን ለመጠበቅ የቁልፍ ካባ በረኛ መጠቀም ትችላለህ። ይህ የተገላቢጦሽ ፕሮክሲ ገፁን ከማሳየቱ በፊት ለተጠቃሚው ፍቃድ ከመስጠቱ እውነታ በተጨማሪ ስለእርስዎ መረጃ በአርእስቶች ውስጥ ወደ መጨረሻው መተግበሪያ ያስተላልፋል። ስለዚህ፣ ማመልከቻዎ OpenIDን የሚደግፍ ከሆነ ተጠቃሚው ወዲያውኑ ተፈቅዶለታል። የኩበርኔትስ ዳሽቦርድ ምሳሌን ተመልከት
Kubernetes ዳሽቦርድ በመጫን ላይ
helm install stable/kubernetes-dashboard --name dashboard -f values_dashboard.yaml
እሴቶች_ዳሽቦርድ.yaml
enableInsecureLogin: true
service:
externalPort: 80
rbac:
clusterAdminRole: true
create: true
serviceAccount:
create: true
name: 'dashboard-test'
የመዳረሻ መብቶችን ማቀናበር፡
በDataOPS ቡድን ውስጥ ላሉ ተጠቃሚዎች የክላስተር አስተዳዳሪ መብቶችን (standard ClusterRole cluster-admin) የሚሰጥ ClusterRoleBinding እንፍጠር።
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
እሴቶች_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 የውቅር ፋይል የሚያመነጭ ጋንግዌይ ማከል ይችላሉ, በእሱ እርዳታ በተጠቃሚዎቻችን ወደ Kubernetes እንገባለን.
helm install --name gangway stable/gangway -f values_gangway.yaml
እሴቶች_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-----
ይህን ይመስላል። የውቅር ፋይሉን ወዲያውኑ እንዲያወርዱ እና የትእዛዞችን ስብስብ በመጠቀም እንዲያመነጩ ይፈቅድልዎታል።
ምንጭ: hab.com