Þessi grein hefur verið skrifuð til að víkka út nú þegar
Í þessari grein mun ég segja þér hvernig á að setja upp og stilla:
- lyklaklæði er opinn hugbúnaður. Sem veitir einn aðgangsstað fyrir umsóknir. Virkar með mörgum samskiptareglum, þar á meðal LDAP og OpenID sem við höfum áhuga á.
- lyklaklæði hliðvörður - öfugt umboðsforrit sem gerir þér kleift að samþætta heimild í gegnum Keycloak.
- Gangbraut - forrit sem býr til stillingu fyrir kubectl sem þú getur skráð þig inn og tengst Kubernetes API í gegnum OpenID.
Hvernig heimildir virka í Kubernetes.
Við getum stjórnað notenda- / hópréttindum með því að nota RBAC, fullt af greinum hefur þegar verið búið til um þetta, ég ætla ekki að staldra við þetta í smáatriðum. Vandamálið er að þú getur notað RBAC til að takmarka notendaréttindi, en Kubernetes veit ekkert um notendur. Það kemur í ljós að við þurfum afhendingarkerfi notenda í Kubernetes. Til að gera þetta munum við bæta þjónustuveitu við Kuberntes OpenID, sem mun segja að slíkur notandi sé raunverulega til, og Kubernetes sjálft mun veita honum réttindin.
Þjálfun
- Þú þarft Kubernetes þyrping eða minikube
- Active Directory
- Lén:
keycloak.example.org
kubernetes-dashboard.example.org
gangway.example.org - Vottorð fyrir lén eða sjálfundirritað vottorð
Ég ætla ekki að staldra við hvernig á að búa til sjálfstætt undirritað vottorð, þú þarft að búa til 2 vottorð, þetta er rótin (vottorðsyfirvöld) og algildisbiðlari fyrir *.example.org lénið
Eftir að þú hefur fengið / gefið út vottorð verður að bæta viðskiptavininum við Kubernetes, til þess búum við til leyndarmál fyrir hann:
kubectl create secret tls tls-keycloak --cert=example.org.crt --key=example.org.pem
Næst munum við nota það fyrir Ingress stjórnandi okkar.
Keycloak uppsetning
Ég ákvað að auðveldast væri að nota tilbúnar lausnir fyrir þetta, nefnilega stýrikort.
Settu upp geymsluna og uppfærðu hana:
helm repo add codecentric https://codecentric.github.io/helm-charts
helm repo update
Búðu til keycloak.yml skrá með eftirfarandi efni:
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
Uppsetning sambandsins
Næst skaltu fara í vefviðmótið
Smelltu í vinstra hornið Bæta við ríki
Key
gildi
heiti
Kubernetes
Sýna nafn
Kubernetes
Slökkva á staðfestingu á tölvupósti notanda:
Umfang viðskiptavinar —> Tölvupóstur —> Kortagerðarmenn —> Tölvupóstur staðfestur (Eyða)
Við settum upp bandalag til að flytja inn notendur frá ActiveDirectory, ég mun skilja eftir skjámyndir hér að neðan, ég held að það verði skýrara.
Notendasamband —> Bæta við þjónustuaðila... —> ldap
Uppsetning sambandsins
Ef allt er í lagi, þá eftir að hafa ýtt á hnappinn Samstilltu alla notendur þú munt sjá skilaboð um árangursríkan innflutning notenda.
Næst þurfum við að kortleggja hópana okkar
Notendasamband --> ldap_localhost --> Kortagerðarmenn --> Búa til
Að búa til kortagerðarmann
Uppsetning viðskiptavinar
Það er nauðsynlegt að búa til viðskiptavin, hvað varðar Keycloak, þetta er forrit sem verður heimilað frá honum. Ég mun undirstrika mikilvæg atriði í skjámyndinni með rauðu.
Viðskiptavinir —> Búa til
Uppsetning viðskiptavinar
Við skulum búa til scoupe fyrir hópa:
Umfang viðskiptavina —> Búa til
Búðu til svigrúm
Og settu upp kortara fyrir þá:
Umfang viðskiptavina —> hópar —> Kortagerðarmenn —> Búa til
Kortagerðarmaður
Bættu kortlagningu hópa okkar við sjálfgefið viðskiptasvið:
Viðskiptavinir —> kubernetes —> Umfang viðskiptavina —> Sjálfgefið umfang viðskiptavinar
Veldu hópar в Laus viðskiptavinarsviðsmellur Bæta við völdum
Við fáum leyndarmálið (og skrifum það á þráðinn) sem við munum nota fyrir heimild í Keycloak:
Viðskiptavinir —> kubernetes —> Skilríki —> Leyndarmál
Þetta lýkur uppsetningunni, en ég fékk villu þegar ég fékk villu 403 eftir að hafa fengið heimild.
Laga:
Umfang viðskiptavina —> hlutverk —> Kortagerðarmenn —> Búa til
Kortagerð
Handritskóði
// add current client-id to token audience
token.addAudience(token.getIssuedFor());
// return token issuer as dummy result assigned to iss again
token.getIssuer();
Stillir Kubernetes
Við þurfum að tilgreina hvar rótarvottorð okkar frá síðunni liggur og hvar OIDC veitandinn er staðsettur.
Til að gera þetta, breyttu skránni /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
...
Uppfærðu kubeadm stillingar í þyrpingunni:
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 stillt
Þú getur notað keycloak hliðvörð til að vernda vefforritið þitt. Auk þeirrar staðreyndar að þessi andstæða umboð mun heimila notandanum áður en hún sýnir síðuna, mun hann einnig senda upplýsingar um þig til lokaforritsins í hausunum. Þannig, ef forritið þitt styður OpenID, þá hefur notandinn strax heimild. Skoðum dæmið um Kubernetes mælaborðið
Setur upp Kubernetes mælaborð
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'
Aðgangsréttur stilltur:
Við skulum búa til ClusterRoleBinding sem mun veita cluster admin réttindi (venjulegt ClusterRole cluster-admin) fyrir notendur í DataOPS hópnum.
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
Settu upp keycloak hliðvörð:
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"
Eftir það, þegar þú reynir að fara til
uppsetning landganga
Til hægðarauka geturðu bætt við landgangi sem mun búa til stillingarskrá fyrir kubectl, með hjálp hennar munum við komast inn í Kubernetes undir notandanum okkar.
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-----
Lítur svona út. Gerir þér kleift að hlaða niður stillingarskránni strax og búa til hana með því að nota skipanir:
Heimild: www.habr.com