Scríobhadh an t-alt seo leis an aidhm a leathnú cheana féin
San Airteagal seo inseoidh mé duit conas a shuiteáil agus a chumrú:
- Eochrach is tionscadal foinse oscailte é. A sholáthraíonn pointe iontrála aonair le haghaidh iarratas. Oibríonn sé le go leor prótacail, lena n-áirítear LDAP agus OpenID, ar díol spéise dúinn iad.
- Geataí eochrach — feidhmchlár seachfhreastalaí droim ar ais a ligeann duit údarú a chomhtháthú trí Keycloak.
- stangairt — feidhmchlár a ghineann cumraíocht do kubectl lenar féidir leat logáil isteach trí OpenID agus ceangal leis an Kubernetes API.
Conas a oibríonn ceadanna i Kubernetes.
Is féidir linn cearta úsáideoirí/grúpa a bhainistiú trí úsáid a bhaint as RBAC, cruthaíodh go leor alt faoi seo cheana féin, ní bheidh mé ag plé go mion leis seo. Is í an fhadhb atá ann gur féidir leat RBAC a úsáid chun cearta úsáideoirí a shrianadh, ach níl a fhios ag Kubernetes aon rud faoi úsáideoirí. Tharlaíonn sé go bhfuil gá dúinn meicníocht seachadta úsáideora i Kubernetes. Chun seo a dhéanamh, cuirfimid soláthraí chuig Kuberntes OpenID, rud a léireoidh go bhfuil úsáideoir den sórt sin ann i ndáiríre, agus tabharfaidh Kubernetes féin cearta dó.
Oiliúint
- Beidh braisle Kubernetes nó mionkube uait
- Eolaire Gníomhach
- Fearainn:
keycloak.example.org
kubernetes-dashboard.example.org
gangway.example.org - Teastas le haghaidh fearainn nó teastas féin-shínithe
Ní dhéanfaidh mé mionsonrú ar conas deimhniú féinsínithe a chruthú; ní mór duit 2 theastas a chruthú, is é seo an fhréamh (Údarás Deimhniúcháin) agus saoróg an chliaint don fhearann *.example.org
Tar éis duit na teastais a fháil / a scríobh, ní mór duit teastas an chliaint a chur le Kubernetes; chun é seo a dhéanamh, cruthaigh rún dó:
kubectl create secret tls tls-keycloak --cert=example.org.crt --key=example.org.pem
Ansin úsáidfimid é dár rialtóir Ingress
Suiteáil Keycloak
Chinn mé gurb é an bealach is éasca réitigh réamhdhéanta a úsáid chuige seo, eadhon cairteacha stiúrtha.
Suiteáil an stór agus nuashonraigh é:
helm repo add codecentric https://codecentric.github.io/helm-charts
helm repo update
Cruthaigh comhad keycloak.yml leis an ábhar seo a leanas:
eochrach.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
Cónaidhm a bhunú
Ansin, téigh go dtí an comhéadan gréasáin
Sa chúinne ar chlé cliceáil Cuir ríocht leis
Key
luach
Ainm
cubernetes
Taispeáin Ainm
Kubernetes
Díchumasaigh seiceáil deimhnithe ríomhphoist úsáideora:
Scóipeanna cliant —> Ríomhphost —> Mappers —> Ríomhphost fíoraithe (Scrios)
Táimid ag bunú cónaidhm chun úsáideoirí a allmhairiú ó ActiveDirectory, fágfaidh mé scáileáin scáileáin thíos, is dóigh liom go mbeidh sé níos soiléire.
Cónaidhm úsáideoirí -> Cuir soláthraí leis… -> ldap
Cónaidhm a bhunú
Má tá gach rud go breá, ansin tar éis an cnaipe a bhrú Sioncrónaigh gach úsáideoir Feicfidh tú teachtaireacht a thugann le fios gur éirigh le hiompórtáil úsáideoirí.
Ansin caithfimid ár ngrúpaí a mhapáil
Cónaidhm úsáideoirí -> ldap_localhost -> Mappers -> Cruthaigh
Mapóir a chruthú
Socrú cliant
Ní mór duit cliant a chruthú, i dtéarmaí Keycloak is feidhmchlár é seo a bheidh údaraithe aige. Leagfaidh mé béim ar phointí tábhachtacha dearg sa scáileán.
Cliaint -> Cruthaigh
Socrú cliant
Déanaimis scúp do ghrúpaí:
Scóipeanna Cliant -> Cruthaigh
Ag cruthú scóip
Agus cuir mapálaí ar bun dóibh:
Scópaí Cliant -> grúpaí -> Mappers -> Cruthaigh
Mapaí
Cuirimid mapáil ár ngrúpaí le Scóip Chliant Réamhshocraithe:
Cliaint -> kubernetes -> Scópaí Cliant -> Scópaí Cliant Réamhshocraithe
Roghnaigh grúpaí в Scóipeanna Cliant ar Fáil, brúigh Cuir roghnaithe leis
Faighimid an rún (agus scríobh síos é áit éigin) a úsáidfimid le haghaidh údarú i Keycloak:
Cliaint -> kubernetes -> Dintiúir -> Rúnda
Críochnaíonn sé seo an socrú, ach bhí earráid agam nuair a fuair mé earráid 403 tar éis údarú rathúil.
Deisigh:
Scópaí Cliant -> róil -> Mappers -> Cruthaigh
Mapaí
Cóid script
// add current client-id to token audience
token.addAudience(token.getIssuedFor());
// return token issuer as dummy result assigned to iss again
token.getIssuer();
Cumrú Kubernetes
Ní mór dúinn a chur in iúl cá bhfuil ár bhfréamhdheimhniú ón suíomh suite, agus cá bhfuil an soláthraí OIDC suite.
Chun seo a dhéanamh, cuir an comhad in eagar /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
...
Nuashonraigh config kubeadm sa bhraisle:
config kubeadm
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
...
Údar-seachfhreastalaí a shocrú
Chun d'fheidhmchlár gréasáin a chosaint, is féidir leat coimeádaí geata eochrach a úsáid. Chomh maith leis an bhfíric go n-údaróidh an seachfhreastalaí droim ar ais seo don úsáideoir sula dtaispeánfar an leathanach, tarchuirfidh sé faisnéis fút sna ceanntásca chuig an bhfeidhmchlár deiridh. Mar sin, má thacaíonn d'iarratas le OpenID, tá an t-úsáideoir údaraithe láithreach. Breathnaímid ar shampla Painéal Kubernetes
Suiteáil Painéal Kubernetes
helm install stable/kubernetes-dashboard --name dashboard -f values_dashboard.yaml
luachanna_dashboard.yaml
enableInsecureLogin: true
service:
externalPort: 80
rbac:
clusterAdminRole: true
create: true
serviceAccount:
create: true
name: 'dashboard-test'
Cearta rochtana a shocrú:
Cruthaímid ClusterRoleBinding a thabharfaidh cearta riaracháin braisle (braisle-admin caighdeánach ClusterRole) d'úsáideoirí sa ghrúpa DataOPS.
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
Suiteáil coimeádaí geata eochrach:
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
luachanna_seachfhreastalaí.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"
Tar éis sin, nuair a dhéanann tú iarracht logáil isteach go
Suiteáil Gangway
Ar mhaithe le caoithiúlacht, is féidir leat bealach a chur leis a ghinfidh comhad cumraíochta do kubectl, le cabhair a rachaimid isteach i Kubernetes faoinár n-úsáideoir.
helm install --name gangway stable/gangway -f values_gangway.yaml
luachanna_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-----
Breathnaíonn sé rud éigin mar seo. Ligeann sé duit comhad cumraíochta a íoslódáil láithreach agus é a ghiniúint ag baint úsáide as sraith orduithe:
Foinse: will.com