මෙම ලිපිය දැනටමත් විස්තර කිරීමට ලියා ඇත
මෙම ලිපියෙන් මම ඔබට කියමි ස්ථාපනය කරන්නේ කෙසේද සහ වින්යාස කරන්නේ කෙසේද:
- යතුරු පුවරුව විවෘත මූලාශ්ර ව්යාපෘතියකි. එය යෙදුම් සඳහා තනි පිවිසුම් ලක්ෂ්යයක් සපයයි. අප උනන්දු වන LDAP සහ OpenID ඇතුළු බොහෝ ප්රොටෝකෝල සමඟ ක්රියා කරයි.
- යතුරු සළුව දොරටු පාලකයා - Keycloak හරහා අවසරය ඒකාබද්ධ කිරීමට ඔබට ඉඩ සලසන ප්රතිලෝම ප්රොක්සි යෙදුම.
- ගැන්ග්වේ - ඔබට OpenID හරහා Kubernetes API වෙත ලොග් වී සම්බන්ධ විය හැකි kubectl සඳහා වින්යාසයක් ජනනය කරන යෙදුමකි.
Kubernetes හි අවසර ක්රියා කරන ආකාරය.
අපට RBAC භාවිතයෙන් පරිශීලක / කණ්ඩායම් අයිතිවාසිකම් කළමනාකරණය කළ හැකිය, මේ පිළිබඳව දැනටමත් ලිපි ගොන්නක් නිර්මාණය කර ඇත, මම මේ ගැන විස්තරාත්මකව වාසය නොකරමි. ගැටළුව වන්නේ පරිශීලක අයිතිවාසිකම් සීමා කිරීමට ඔබට RBAC භාවිතා කළ හැකි නමුත් Kubernetes පරිශීලකයින් ගැන කිසිවක් නොදනී. අපට Kubernetes හි පරිශීලක බෙදා හැරීමේ යාන්ත්රණයක් අවශ්ය බව පෙනේ. මෙය සිදු කිරීම සඳහා, අපි Kuberntes OpenID වෙත සැපයුම්කරුවෙකු එක් කරන්නෙමු, එවැනි පරිශීලකයෙකු සැබවින්ම පවතින බව පවසන අතර Kubernetes විසින්ම ඔහුට අයිතිවාසිකම් ලබා දෙනු ඇත.
සකස් කිරීම
- ඔබට Kubernetes පොකුරක් හෝ minikube අවශ්ය වනු ඇත
- සක්රීය නාමාවලිය
- වසම්:
keycloak.example.org
kubernetes-dashboard.example.org
gangway.example.org - වසම් සඳහා සහතිකය හෝ ස්වයං අත්සන් සහතිකය
මම ස්වයං අත්සන් සහතිකයක් සාදා ගන්නේ කෙසේද යන්න ගැන කතා නොකරමි, ඔබට සහතික 2ක් සෑදිය යුතුය, මෙය *.example.org වසම සඳහා මූල (සහතික අධිකාරිය) සහ Wildcard සේවාදායකයා වේ.
ඔබට සහතික ලැබීමෙන් / නිකුත් කිරීමෙන් පසු, සේවාදායකයා Kubernetes වෙත එක් කළ යුතුය, මේ සඳහා අපි ඒ සඳහා රහසක් සාදන්නෙමු:
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
සම්මේලනය පිහිටුවීම
ඊළඟට, වෙබ් අතුරු මුහුණත වෙත යන්න
වම් කෙළවරේ ක්ලික් කරන්න රාජධානිය එක් කරන්න
යතුර
වටිනාකම
නම
කුබර්නෙට්ස්
ප්රදර්ශන නාමය
කුබර්නෙට්ස්
පරිශීලක ඊමේල් සත්යාපනය අබල කරන්න:
සේවාලාභී විෂය පථයන් —> විද්යුත් තැපෑල —> සිතියම් කරන්නන් —> විද්යුත් තැපෑල සත්යාපනය කරන ලදී (මකන්න)
අපි ActiveDirectory වෙතින් පරිශීලකයින් ආනයනය කිරීමට ෆෙඩරේෂන් පිහිටුවා ඇත, මම පහත තිරපිටපත් තබමි, එය වඩාත් පැහැදිලි වනු ඇතැයි මම සිතමි.
පරිශීලක සම්මේලනය -> සපයන්නා එක් කරන්න... -> ldap
සම්මේලනය පිහිටුවීම
සියල්ල හොඳින් නම්, බොත්තම එබීමෙන් පසු සියලුම පරිශීලකයින් සමමුහුර්ත කරන්න පරිශීලකයින්ගේ සාර්ථක ආනයනය පිළිබඳ පණිවිඩයක් ඔබට පෙනෙනු ඇත.
ඊළඟට අපි අපේ කණ්ඩායම් සිතියම්ගත කළ යුතුයි
පරිශීලක සම්මේලනය --> ldap_localhost --> සිතියම්කරුවන් --> සාදන්න
සිතියම්කරුවෙකු නිර්මාණය කිරීම
සේවාලාභී සැකසුම
සේවාදායකයෙකු නිර්මාණය කිරීම අවශ්ය වේ, Keycloak අනුව, මෙය ඔහුගෙන් අවසර දෙනු ලබන යෙදුමකි. මම තිර පිටපතේ ඇති වැදගත් කරුණු රතු පැහැයෙන් ඉස්මතු කරමි.
ගනුදෙනුකරුවන් -> සාදන්න
සේවාලාභී සැකසුම
කණ්ඩායම් සඳහා ස්කූප් නිර්මාණය කරමු:
සේවාලාභී විෂය පථයන් -> නිර්මාණය කරන්න
විෂය පථය සාදන්න
ඔවුන් සඳහා සිතියම්කරුවෙකු සකසන්න:
සේවාලාභී විෂය පථයන් —> කණ්ඩායම් —> සිතියම්කරුවන් —> නිර්මාණය කරන්න
සිතියම්කරු
අපගේ කණ්ඩායම් සිතියම්ගත කිරීම පෙරනිමි සේවාදායක විෂය පථයට එක් කරන්න:
සේවාලාභීන් —> kubernetes —> Client Scopes —> Default Client Scopes
තෝරන්න කණ්ඩායම් в පවතින සේවාදායක විෂය පථයන්, ඔබන්න තෝරාගත් එකතු කරන්න
අපි 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 වින්යාසය යාවත්කාලීන කරන්න:
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 Dashboard හි උදාහරණය සලකා බලන්න
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'
ප්රවේශ හිමිකම් සැකසීම:
DataOPS සමූහයේ සිටින පරිශීලකයින් සඳහා පොකුරු පරිපාලක අයිතිවාසිකම් (සම්මත 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
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 සඳහා වින්යාස ගොනුවක් ජනනය කරන කල්ලියක් එක් කළ හැකිය, එහි ආධාරයෙන් අපි අපගේ පරිශීලකයා යටතේ 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