Энэ нийтлэлийг аль хэдийнээ өргөжүүлэх зорилгоор бичсэн болно
Энэ нийтлэлд би хэрхэн суулгах, тохируулах талаар танд хэлэх болно:
- түлхүүрийн нөмрөг нээлттэй эхийн төсөл юм. Энэ нь аппликешнүүдэд нэвтрэх нэг цэгээр хангадаг. Бидний сонирхож буй LDAP, OpenID зэрэг олон протоколуудтай ажилладаг.
- түлхүүрийн нөмрөг хаалгач - Keycloak-ээр дамжуулан зөвшөөрлийг нэгтгэх боломжийг олгодог урвуу прокси програм.
- Гарц - kubectl-ийн тохиргоог үүсгэдэг програм бөгөөд та OpenID-ээр дамжуулан Kubernetes API-д нэвтэрч холбогдох боломжтой.
Кубернетес дэх зөвшөөрөл хэрхэн ажилладаг вэ.
Бид RBAC ашиглан хэрэглэгчийн / бүлгийн эрхийг удирдах боломжтой, энэ талаар олон нийтлэл аль хэдийн бий болсон тул би энэ талаар дэлгэрэнгүй ярихгүй. Асуудал нь та RBAC ашиглан хэрэглэгчийн эрхийг хязгаарлаж болох боловч Кубернетес хэрэглэгчдийн талаар юу ч мэдэхгүй. Бид Kubernetes-д хэрэглэгчдэд хүргэх механизм хэрэгтэй болж байна. Үүнийг хийхийн тулд бид Kuberntes OpenID-д үйлчилгээ үзүүлэгч нэмэх бөгөөд энэ нь ийм хэрэглэгч үнэхээр байдаг гэж хэлэх бөгөөд Кубернетес өөрөө түүнд эрхийг өгөх болно.
Сургалт
- Танд Kubernetes кластер эсвэл minikube хэрэгтэй болно
- Идэвхтэй лавлах
- Домэйн:
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-ийн хувьд үйлчлүүлэгч үүсгэх шаардлагатай бөгөөд энэ нь түүнээс зөвшөөрөл авах програм юм. Би дэлгэцийн агшин дээрх чухал цэгүүдийг улаанаар тодруулах болно.
Үйлчлүүлэгч -> Үүсгэх
Үйлчлүүлэгчийн тохиргоо
Бүлэгт зориулсан скоп үүсгэцгээе:
Client Scopes -> Үүсгэх
Хамрах хүрээ үүсгэх
Мөн тэдэнд зориулж зураглагч тохируулна уу:
Client Scopes -> бүлгүүд -> Mappers -> Үүсгэх
Газрын зурагчин
Манай бүлгүүдийн зураглалыг үндсэн Client Scope-д нэмнэ үү:
Clients -> kubernetes -> Client Scopes -> Үндсэн Client Scopes
Бид сонгоно уу бүлэг в Боломжтой үйлчлүүлэгчийн хүрээдарна уу Сонгосон нэмэх
Бид Keycloak дээр зөвшөөрөл авахын тулд ашиглах нууцыг олж авдаг (мөн үүнийг хэлхээнд бичнэ үү):
Үйлчлүүлэгч -> kubernetes -> Итгэмжлэх жуух бичиг -> Нууц
Энэ нь тохиргоог дуусгах боловч амжилттай зөвшөөрөл авсны дараа би 403 алдаа хүлээн авахад алдаа гарсан.
Засах:
Client Scopes —> үүрэг —> Mappers —> Үүсгэх
Газрын зураг
Скрипт код
// 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-г тохируулж байна
Та вэб програмаа хамгаалахын тулд keycloak gatekeeper ашиглаж болно. Энэхүү урвуу прокси нь хуудсыг харуулахын өмнө хэрэглэгчийг зөвшөөрөхөөс гадна таны тухай мэдээллийг толгойн хэсэгт байгаа програмын төгсгөлд дамжуулах болно. Тиймээс, хэрэв таны програм OpenID-г дэмждэг бол хэрэглэгч тэр даруй зөвшөөрөл авна. Kubernetes хяналтын самбарын жишээг авч үзье
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 бүлгийн хэрэглэгчдэд кластерын админ эрх (стандарт ClusterRole кластер-админ) өгөх 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
Keycloak gatekeeper суулгах:
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
утгууд_прокси.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-д зориулсан тохиргооны файл үүсгэх гарц нэмж болох бөгөөд үүний тусламжтайгаар бид Кубернетес рүү хэрэглэгчийнхээ доор орох болно.
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