Trumpa pamoka apie tai, kaip galite naudoti „Keycloak“, kad prijungtumėte „Kubernetes“ prie LDAP serverio ir sukonfigūruotumėte vartotojų bei grupių importavimą. Tai leis sukonfigūruoti RBAC savo vartotojams ir naudoti autentifikavimo tarpinį serverį, kad apsaugotumėte „Kubernetes“ prietaisų skydelį ir kitas programas, kurios negali savęs autentifikuoti.
Keycloak montavimas
Tarkime, kad jau turite LDAP serverį. Tai gali būti „Active Directory“, „FreeIPA“, „OpenLDAP“ ar dar kas nors. Jei neturite LDAP serverio, iš esmės galite kurti vartotojus tiesiai „Keycloak“ sąsajoje arba naudoti viešuosius idc teikėjus (Google, Github, Gitlab), rezultatas bus beveik toks pat.
Visų pirma, įsidiegkime patį Keycloak.Įdiegimas gali būti atliekamas atskirai arba tiesiai į Kubernetes klasterį.Paprastai jei turite keletą Kubernetes klasterių, būtų lengviau įdiegti atskirai. Kita vertus, visada galite naudoti
Norėdami saugoti Keycloak duomenis, jums reikės duomenų bazės. Numatytasis yra h2
(visi duomenys saugomi lokaliai), bet galima ir naudotis postgres
, mysql
arba mariadb
.
Jei vis tiek nuspręsite įdiegti „Keycloak“ atskirai, išsamesnes instrukcijas rasite
Federacijos nustatymas
Visų pirma, sukurkime naują sritį. Realm yra mūsų programos erdvė. Kiekviena programa gali turėti savo sritį su skirtingais vartotojais ir autorizacijos nustatymais. „Master“ sritį naudoja pati „Keycloak“, todėl neteisinga ją naudoti kam nors kitam.
Spauskite čia Pridėti sritį
pasirinkimas
Vertė
Vardas
kubernetes
Rodomas pavadinimas
Kubernetes
HTML rodomas pavadinimas
<img src="https://kubernetes.io/images/nav_logo.svg" width="400" >
Pagal numatytuosius nustatymus „Kubernetes“ tikrina, ar vartotojo el. paštas patvirtintas, ar ne. Kadangi naudojame savo LDAP serverį, šis patikrinimas beveik visada grįš false
. Išjunkite šios parinkties atvaizdavimą Kubernetes:
Klientų apimtys -> El.pašto adresas* -> Žemėlapių kūrėjai -> El. paštas patvirtintas (Ištrinti)
Dabar sukurkime federaciją; norėdami tai padaryti, eikite į:
Vartotojų federacija -> Pridėti teikėją… -> ldap
Štai FreeIPA nustatymų pavyzdys:
pasirinkimas
Vertė
Konsolės rodomas pavadinimas
freeipa.example.org
Pardavėjas
Red Hat Directory Server
UUID LDAP atributas
ipauniqueid
Ryšio URL
ldaps://freeipa.example.org
Vartotojai DN
cn=users,cn=accounts,dc=example,dc=org
Susieti DN
uid=keycloak-svc,cn=users,cn=accounts,dc=example,dc=org
Susieti kredencialus
<password>
Leisti Kerberos autentifikavimą:
on
Kerberos sritis:
EXAMPLE.ORG
Serverio vadovas:
HTTP/[email protected]
KeyTab:
/etc/krb5.keytab
Vartotojas keycloak-svc
reikia iš anksto sukurti mūsų LDAP serveryje.
„Active Directory“ atveju tereikia pasirinkti Pardavėjas: Active Directory ir reikiami nustatymai bus automatiškai įvesti į formą.
Spauskite čia Sutaupote
Dabar eikime toliau:
Vartotojų federacija -> freeipa.example.org -> Žemėlapių kūrėjai -> Vardas
pasirinkimas
Vertė
Ldap atributas
givenName
Dabar įgalinkime grupės atvaizdavimą:
Vartotojų federacija -> freeipa.example.org -> Žemėlapių kūrėjai -> kurti
pasirinkimas
Vertė
Vardas
groups
Žemėlapio sudarytojo tipas
group-ldap-mapper
LDAP grupės DN
cn=groups,cn=accounts,dc=example,dc=org
Vartotojų grupių gavimo strategija
GET_GROUPS_FROM_USER_MEMBEROF_ATTRIBUTE
Dabar, kai federacijos sąranka baigta, pereikime prie kliento nustatymo.
Kliento sąranka
Sukurkime naują klientą (programą, kuri priims vartotojus iš Keycloak). Eikime toliau:
Klientų -> kurti
pasirinkimas
Vertė
kliento ID
kubernetes
Prieigos tipas
confidenrial
Šaknies URL
http://kubernetes.example.org/
Galiojantys peradresavimo URI
http://kubernetes.example.org/*
Administratoriaus URL
http://kubernetes.example.org/
Taip pat sukurkime apimtį grupėms:
Klientų taikymo sritis -> kurti
pasirinkimas
Vertė
šablonas
No template
Vardas
groups
Visas grupės kelias
false
Ir sukurkite jiems žemėlapių sudarytoją:
Klientų taikymo sritis -> grupės -> Žemėlapių kūrėjai -> kurti
pasirinkimas
Vertė
Vardas
groups
Žemėlapio sudarytojo tipas
Group membership
Token Claim pavadinimas
groups
Dabar turime įjungti atvaizdavimo grupę savo kliento srityje:
Klientų -> kubernetes -> Klientų taikymo sritis -> Numatytosios klientų sritys
pasirinkti grupės в Galimos klientų apimtyspaspauskite Pridėti pasirinktą
Dabar sukonfigūruokime savo programos autentifikavimą, eikite į:
Klientų -> kubernetes
pasirinkimas
Vertė
Autorizacija įjungta
ON
Spauskime sutaupyti ir kliento sąranka baigta, dabar skirtuke
Klientų -> kubernetes -> įgaliojimai
Jūs galite gauti Paslaptis kurį naudosime toliau.
„Kubernetes“ konfigūravimas
„Kubernetes“ nustatymas OIDC leidimui yra gana trivialus ir nėra labai sudėtingas. Viskas, ką jums reikia padaryti, tai įdėti savo OIDC serverio CA sertifikatą /etc/kubernetes/pki/oidc-ca.pem
ir pridėkite reikiamas kube-apiserver parinktis.
Norėdami tai padaryti, atnaujinkite /etc/kubernetes/manifests/kube-apiserver.yaml
apie visus savo meistrus:
...
spec:
containers:
- command:
- kube-apiserver
...
- --oidc-ca-file=/etc/kubernetes/pki/oidc-ca.pem
- --oidc-client-id=kubernetes
- --oidc-groups-claim=groups
- --oidc-issuer-url=https://keycloak.example.org/auth/realms/kubernetes
- --oidc-username-claim=email
...
Be to, atnaujinkite kubeadm konfigūraciją klasteryje, kad neprarastumėte šių nustatymų atnaujindami:
kubectl edit -n kube-system configmaps kubeadm-config
...
data:
ClusterConfiguration: |
apiServer:
extraArgs:
oidc-ca-file: /etc/kubernetes/pki/oidc-ca.pem
oidc-client-id: kubernetes
oidc-groups-claim: groups
oidc-issuer-url: https://keycloak.example.org/auth/realms/kubernetes
oidc-username-claim: email
...
Tai užbaigia „Kubernetes“ konfigūraciją. Šiuos veiksmus galite pakartoti visose „Kubernetes“ grupėse.
Pradinis leidimas
Atlikę šiuos veiksmus, jau turėsite Kubernetes klasterį su sukonfigūruota OIDC leidimu. Vienintelis dalykas yra tai, kad jūsų vartotojai dar neturi sukonfigūruoto kliento ar savo kubeconfig. Norėdami išspręsti šią problemą, turite sukonfigūruoti automatinį kubeconfig paskirstymą vartotojams po sėkmingo autorizavimo.
Norėdami tai padaryti, galite naudoti specialias žiniatinklio programas, kurios leidžia autentifikuoti vartotoją ir atsisiųsti paruoštą kubeconfig. Vienas iš patogiausių yra
Norėdami sukonfigūruoti Kuberos, tiesiog apibūdinkite kubeconfig šabloną ir paleiskite jį naudodami šiuos parametrus:
kuberos https://keycloak.example.org/auth/realms/kubernetes kubernetes /cfg/secret /cfg/template
Išsamesnės informacijos žr
Taip pat galima naudoti
Gautą kubeconfig galima patikrinti svetainėje users[].user.auth-provider.config.id-token
iš savo kubeconfig į formą svetainėje ir iškart gausite nuorašą.
RBAC nustatymas
Konfigūruodami RBAC, galite nurodyti tiek vartotojo vardą (lauką name
jwt prieigos rakte) ir kiekvienai vartotojų grupei (laukas groups
jwt žetonu). Čia yra grupės teisių nustatymo pavyzdys kubernetes-default-namespace-admins
:
kubernetes-default-namespace-admins.yaml
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
name: default-admins
namespace: default
rules:
- apiGroups:
- '*'
resources:
- '*'
verbs:
- '*'
---
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
name: kubernetes-default-namespace-admins
namespace: default
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: Role
name: default-admins
subjects:
- apiGroup: rbac.authorization.k8s.io
kind: Group
name: kubernetes-default-namespace-admins
Daugiau RBAC pavyzdžių galite rasti
Auth-proxy nustatymas
Yra nuostabus projektas
dashboard-proxy.yaml
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: kubernetes-dashboard-proxy
spec:
replicas: 1
template:
metadata:
labels:
app: kubernetes-dashboard-proxy
spec:
containers:
- args:
- --listen=0.0.0.0:80
- --discovery-url=https://keycloak.example.org/auth/realms/kubernetes
- --client-id=kubernetes
- --client-secret=<your-client-secret-here>
- --redirection-url=https://kubernetes-dashboard.example.org
- --enable-refresh-tokens=true
- --encryption-key=ooTh6Chei1eefooyovai5ohwienuquoh
- --upstream-url=https://kubernetes-dashboard.kube-system
- --resources=uri=/*
image: keycloak/keycloak-gatekeeper
name: kubernetes-dashboard-proxy
ports:
- containerPort: 80
livenessProbe:
httpGet:
path: /oauth/health
port: 80
initialDelaySeconds: 3
timeoutSeconds: 2
readinessProbe:
httpGet:
path: /oauth/health
port: 80
initialDelaySeconds: 3
timeoutSeconds: 2
---
apiVersion: v1
kind: Service
metadata:
name: kubernetes-dashboard-proxy
spec:
ports:
- port: 80
protocol: TCP
targetPort: 80
selector:
app: kubernetes-dashboard-proxy
type: ClusterIP
Šaltinis: www.habr.com