Déanaimid údarú ActiveDirectory a cheangal le Kubernetes ag baint úsáide as Keycloak

Scríobhadh an t-alt seo leis an aidhm a leathnú cheana féin ann cheana, ach ag caint faoi ghnéithe an cheangail go sonrach le Microsoft ActiveDirectory, agus comhlánaíonn sé é freisin.

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 keycloak.example.org

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úDéanaimid údarú ActiveDirectory a cheangal le Kubernetes ag baint úsáide as Keycloak
Déanaimid údarú ActiveDirectory a cheangal le Kubernetes ag baint úsáide as Keycloak

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úDéanaimid údarú ActiveDirectory a cheangal le Kubernetes ag baint úsáide as Keycloak

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ú cliantDéanaimid údarú ActiveDirectory a cheangal le Kubernetes ag baint úsáide as Keycloak

Déanaimis scúp do ghrúpaí:

Scóipeanna Cliant -> Cruthaigh

Ag cruthú scóipDéanaimid údarú ActiveDirectory a cheangal le Kubernetes ag baint úsáide as Keycloak

Agus cuir mapálaí ar bun dóibh:

Scópaí Cliant -> grúpaí -> Mappers -> Cruthaigh

MapaíDéanaimid údarú ActiveDirectory a cheangal le Kubernetes ag baint úsáide as Keycloak

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. Tuairisc ar fhabht.

Deisigh:

Scópaí Cliant -> róil -> Mappers -> Cruthaigh

MapaíDéanaimid údarú ActiveDirectory a cheangal le Kubernetes ag baint úsáide as Keycloak

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 kubernetes-dashboard.example.org, tarlóidh atreorú chuig Keycloak agus má éiríonn leis an údarú, tógfar sinn chuig an bPainéal atá logáilte isteach cheana féin.

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:

Déanaimid údarú ActiveDirectory a cheangal le Kubernetes ag baint úsáide as Keycloak

Foinse: will.com

Add a comment