Ysgrifennwyd yr erthygl hon gyda'r nod o ehangu'r eisoes
Yn yr erthygl hon byddaf yn dweud wrthych sut i osod a ffurfweddu:
- clogyn yn brosiect ffynhonnell agored. Sy'n darparu un pwynt mynediad ar gyfer ceisiadau. Yn gweithio gyda llawer o brotocolau, gan gynnwys LDAP ac OpenID, sydd o ddiddordeb i ni.
- porthor cloak — cymhwysiad dirprwy gwrthdro sy'n eich galluogi i integreiddio awdurdodiad trwy Keycloak.
- gangway - cymhwysiad sy'n cynhyrchu cyfluniad ar gyfer kubectl y gallwch fewngofnodi trwy OpenID a chysylltu ag API Kubernetes.
Sut mae caniatâd yn gweithio yn Kubernetes.
Gallwn reoli hawliau defnyddwyr / grŵp gan ddefnyddio RBAC, mae criw o erthyglau eisoes wedi'u creu am hyn, ni fyddaf yn canolbwyntio ar hyn yn fanwl. Y broblem yw y gallwch chi ddefnyddio RBAC i gyfyngu ar hawliau defnyddwyr, ond nid yw Kubernetes yn gwybod dim am ddefnyddwyr. Mae'n ymddangos bod angen mecanwaith cyflwyno defnyddwyr arnom yn Kubernetes. I wneud hyn, byddwn yn ychwanegu darparwr at Kuberntes OpenID, a fydd yn nodi bod defnyddiwr o'r fath yn bodoli mewn gwirionedd, a bydd Kubernetes ei hun yn rhoi hawliau iddo.
Hyfforddiant
- Bydd angen clwstwr Kubernetes neu minikube arnoch chi
- Active Directory
- Parthau:
keycloak.example.org
kubernetes-dashboard.example.org
gangway.example.org - Tystysgrif ar gyfer parthau neu dystysgrif hunan-lofnodedig
Nid af i fanylion ar sut i greu tystysgrif hunan-lofnodedig; mae angen i chi greu 2 dystysgrif, dyma'r gwraidd (Awdurdod Ardystio) a'r cerdyn gwyllt cleient ar gyfer y parth *.example.org
Ar ôl i chi dderbyn / ysgrifennu'r tystysgrifau, mae angen i chi ychwanegu tystysgrif y cleient at Kubernetes; i wneud hyn, crëwch gyfrinach ar ei gyfer:
kubectl create secret tls tls-keycloak --cert=example.org.crt --key=example.org.pem
Nesaf byddwn yn ei ddefnyddio ar gyfer ein rheolydd Ingress
Gosod cloak
Penderfynais mai’r ffordd hawsaf oedd defnyddio datrysiadau parod ar gyfer hyn, sef siartiau helm.
Gosodwch yr ystorfa a'i diweddaru:
helm repo add codecentric https://codecentric.github.io/helm-charts
helm repo update
Creu ffeil keycloak.yml gyda'r cynnwys canlynol:
clogyn.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
Sefydlu Ffederasiwn
Nesaf, ewch i'r rhyngwyneb gwe
Yn y gornel chwith cliciwch Ychwanegu tir
allweddol
Gwerth
Enw
cubernetes
arddangos Enw
Kubernetes
Analluogi gwirio cadarnhad e-bost defnyddiwr:
Cwmpasau cleient -> E-bost -> Mapwyr -> E-bost wedi'i ddilysu (Dileu)
Rydym yn sefydlu ffederasiwn i fewnforio defnyddwyr o ActiveDirectory, byddaf yn gadael sgrinluniau isod, rwy'n credu y bydd yn gliriach.
Ffederasiwn defnyddwyr —> Ychwanegu darparwr… —> ldap
Sefydlu Ffederasiwn
Os yw popeth yn iawn, yna ar ôl pwyso'r botwm Cydamseru pob defnyddiwr Fe welwch neges yn nodi mewnforio defnyddwyr yn llwyddiannus.
Nesaf mae angen i ni fapio ein grwpiau
Ffederasiwn defnyddwyr -> ldap_localhost -> Mappers -> Creu
Creu mapiwr
Gosodiad cleient
Mae angen i chi greu cleient, o ran Keycloak mae hwn yn gais a fydd yn cael ei awdurdodi ganddo. Byddaf yn tynnu sylw at bwyntiau pwysig mewn coch yn y sgrinlun.
Cleientiaid -> Creu
Gosodiad cleient
Gadewch i ni greu sgŵp ar gyfer grwpiau:
Cwmpas Cleient -> Creu
Creu cwmpas
A gosod mapiwr ar eu cyfer:
Cwmpas Cleient -> grwpiau -> Mapwyr -> Creu
Mapper
Rydym yn ychwanegu mapiau o'n grwpiau at Sgôp Cleient Rhagosodedig:
Cleientiaid -> kubernetes -> Cwmpas Cleient -> Sgôp Cleient Rhagosodedig
dewiswch grwpiau в Cwmpas Cleient Ar Gaelcliciwch Ychwanegu a ddewiswyd
Rydyn ni'n cael y gyfrinach (a'i hysgrifennu yn rhywle) y byddwn ni'n ei defnyddio i'w hawdurdodi yn Keycloak:
Cleientiaid -> kubernetes -> Manylion -> Cyfrinachol
Mae hyn yn cwblhau'r gosodiad, ond roedd gennyf gamgymeriad pan dderbyniais wall 403 ar ôl awdurdodi'n llwyddiannus.
Trwsio:
Cwmpasau Cleient -> rolau -> Mapwyr -> Creu
Mapwyr
Cod sgript
// add current client-id to token audience
token.addAudience(token.getIssuedFor());
// return token issuer as dummy result assigned to iss again
token.getIssuer();
Ffurfweddu Kubernetes
Mae angen inni nodi lle mae ein tystysgrif gwraidd o'r wefan wedi'i lleoli, a lle mae'r darparwr OIDC wedi'i leoli.
I wneud hyn, golygwch y ffeil /etc/kubernetes/manifests/kube-apiserver.yaml
ciwb-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
...
Diweddaru ffurfwedd kubeadm yn y clwstwr:
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
...
Gosod auth-proxy
I amddiffyn eich cymhwysiad gwe, gallwch ddefnyddio porthor cloak bysell. Yn ogystal â'r ffaith y bydd y dirprwy gwrthdro hwn yn awdurdodi'r defnyddiwr cyn dangos y dudalen, bydd hefyd yn trosglwyddo gwybodaeth amdanoch chi yn y penawdau i'r cymhwysiad terfynol. Felly, os yw'ch cais yn cefnogi OpenID, caiff y defnyddiwr ei awdurdodi ar unwaith. Edrychwn ar enghraifft Dangosfwrdd Kubernetes
Gosod Dangosfwrdd Kubernetes
helm install stable/kubernetes-dashboard --name dashboard -f values_dashboard.yaml
gwerthoedd_dashfwrdd.yaml
enableInsecureLogin: true
service:
externalPort: 80
rbac:
clusterAdminRole: true
create: true
serviceAccount:
create: true
name: 'dashboard-test'
Gosod hawliau mynediad:
Gadewch i ni greu ClusterRoleBinding a fydd yn rhoi hawliau gweinyddol clwstwr (gweinyddwr clwstwr safonol ClusterRole) i ddefnyddwyr yn y grŵp 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
Gosod porthor cloak bysell:
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
gwerthoedd_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"
Ar ôl hynny, pan fyddwch yn ceisio mewngofnodi i
Gosod Gangway
Er hwylustod, gallwch ychwanegu gangway a fydd yn cynhyrchu ffeil ffurfweddu ar gyfer kubectl, gyda chymorth y byddwn yn mynd i mewn i Kubernetes o dan ein defnyddiwr.
helm install --name gangway stable/gangway -f values_gangway.yaml
gwerthoedd_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-----
Mae'n edrych rhywbeth fel hyn. Yn caniatáu ichi lawrlwytho ffeil ffurfweddu ar unwaith a'i chynhyrchu gan ddefnyddio set o orchmynion:
Ffynhonnell: hab.com