Tämä artikkeli on kirjoitettu laajentamaan jo
Tässä artikkelissa kerron kuinka asentaa ja määrittää:
- Avaimenperä on avoimen lähdekoodin projekti. Joka tarjoaa yhden pisteen sovelluksille. Toimii monien protokollien kanssa, mukaan lukien LDAP ja OpenID, joista olemme kiinnostuneita.
- avainviitta portinvartija - käänteinen välityspalvelinsovellus, jonka avulla voit integroida valtuutuksen Keycloakin kautta.
- käytävä - sovellus, joka luo konfiguraation kubectl:lle, jolla voit kirjautua sisään ja muodostaa yhteyden Kubernetes API:hen OpenID:n kautta.
Miten käyttöoikeudet toimivat Kubernetesissa.
Voimme hallita käyttäjien / ryhmien oikeuksia RBAC: n avulla, tästä on jo luotu joukko artikkeleita, en käsittele tätä yksityiskohtaisesti. Ongelmana on, että RBAC:n avulla voit rajoittaa käyttäjien oikeuksia, mutta Kubernetes ei tiedä käyttäjistä mitään. Osoittautuu, että tarvitsemme käyttäjien toimitusmekanismin Kubernetesiin. Tätä varten lisäämme Kuberntes OpenID:hen palveluntarjoajan, joka sanoo, että tällainen käyttäjä todella on olemassa, ja Kubernetes itse antaa hänelle oikeudet.
Koulutus
- Tarvitset Kubernetes-klusterin tai minikubin
- Active Directory
- Verkkotunnukset:
keycloak.example.org
kubernetes-dashboard.example.org
gangway.example.org - Varmenne verkkotunnuksille tai itse allekirjoitettu varmenne
En käsittele itse allekirjoitetun varmenteen luomista, sinun on luotava 2 varmennetta, tämä on *.example.org-verkkotunnuksen juuri (varmenteen myöntäjä) ja jokerimerkkiasiakas
Kun olet vastaanottanut / myöntänyt varmenteita, asiakas on lisättävä Kubernetesiin, tätä varten luomme sille salaisuuden:
kubectl create secret tls tls-keycloak --cert=example.org.crt --key=example.org.pem
Seuraavaksi käytämme sitä Ingress-ohjaimessamme.
Avaimenperän asennus
Päätin, että helpoin tapa on käyttää tähän valmiita ratkaisuja, nimittäin ruorikarttoja.
Asenna arkisto ja päivitä se:
helm repo add codecentric https://codecentric.github.io/helm-charts
helm repo update
Luo keycloak.yml-tiedosto, jossa on seuraava sisältö:
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
Liiton asetukset
Siirry seuraavaksi verkkokäyttöliittymään
Napsauta vasemmassa kulmassa Lisää valtakunta
avain
Arvo
Nimi
kuvernööri
Näytön nimi
Kubernetes
Poista käyttäjän sähköpostin vahvistus käytöstä:
Asiakasalueet —> Sähköposti —> Mappers —> Sähköposti vahvistettu (Poista)
Perustimme liittämisen tuomaan käyttäjiä ActiveDirectorysta, jätän kuvakaappaukset alle, luulen sen olevan selkeämpi.
Käyttäjien yhdistäminen —> Lisää tarjoaja... —> ldap
Liiton asetukset
Jos kaikki on hyvin, niin painikkeen painamisen jälkeen Synkronoi kaikki käyttäjät näet viestin onnistuneesta käyttäjien tuonnista.
Seuraavaksi meidän on kartoitettava ryhmämme
Käyttäjien yhdistäminen --> ldap_localhost --> Mappers --> Create
Kartantekijän luominen
Asiakkaan asetukset
On tarpeen luoda asiakas, Keycloakin kannalta tämä on sovellus, joka valtuutetaan häneltä. Korostan tärkeät kohdat kuvakaappauksessa punaisella.
Asiakkaat —> Luo
Asiakkaan asetukset
Luodaan scoupe ryhmille:
Asiakasalueet —> Luo
Luo laajuus
Ja perustaa heille kartoittaja:
Asiakasalueet —> ryhmät —> kartoittajat —> Luo
Mapper
Lisää ryhmiemme kartoitus oletusasiakasalueisiin:
Asiakkaat —> kubernetes —> asiakasalueet —> oletusasiakasalueet
valita ryhmät в Saatavilla olevat asiakasalueetpainamalla Lisää valitut
Saamme salaisuuden (ja kirjoitamme sen säiettä), jota käytämme valtuutukseen Keycloakissa:
Asiakkaat —> kubernetes —> valtuustiedot —> salainen
Tämä viimeistelee asennuksen, mutta minulla oli virhe, kun sain onnistuneen valtuutuksen jälkeen virheilmoituksen 403.
Korjata:
Client Scopes —> roolit —> Mappers —> Create
mapper
Script Code
// add current client-id to token audience
token.addAudience(token.getIssuedFor());
// return token issuer as dummy result assigned to iss again
token.getIssuer();
Kubernetesin määrittäminen
Meidän on määritettävä, missä sivuston juurivarmennemme sijaitsee ja missä OIDC-toimittaja sijaitsee.
Voit tehdä tämän muokkaamalla tiedostoa /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
...
Päivitä kubeadm-kokoonpano klusterissa:
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
...
Asetetaan todennusvälityspalvelinta
Voit käyttää keycloak gatekeeperiä suojataksesi verkkosovelluksesi. Sen lisäksi, että tämä käänteinen välityspalvelin valtuuttaa käyttäjän ennen sivun näyttämistä, se välittää myös tietoja sinusta loppusovellukselle otsikoissa. Näin ollen, jos sovelluksesi tukee OpenID:tä, käyttäjä valtuutetaan välittömästi. Harkitse esimerkkiä Kubernetes Dashboardista
Kubernetes Dashboardin asentaminen
helm install stable/kubernetes-dashboard --name dashboard -f values_dashboard.yaml
arvot_dashboard.yaml
enableInsecureLogin: true
service:
externalPort: 80
rbac:
clusterAdminRole: true
create: true
serviceAccount:
create: true
name: 'dashboard-test'
Käyttöoikeuksien asettaminen:
Luodaan ClusterRoleBinding, joka antaa klusterin järjestelmänvalvojan oikeudet (vakio ClusterRole cluster-admin) DataOPS-ryhmän käyttäjille.
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
Asenna 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
arvot_välityspalvelin.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"
Sen jälkeen, kun yrität mennä
käytävän asennus
Mukavuuden vuoksi voit lisätä käytävän, joka luo konfigurointitiedoston kubectlille, jonka avulla pääsemme käyttäjämme alaisuuteen Kubernetesiin.
helm install --name gangway stable/gangway -f values_gangway.yaml
arvot_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-----
Näyttää tältä. Voit ladata konfigurointitiedoston välittömästi ja luoda sen käyttämällä komentosarjaa:
Lähde: will.com