Torolalana kely momba ny fampiasana Keycloak hampifandraisana ny Kubernetes amin'ny mpizara LDAP anao ary hananganana fanafarana mpampiasa sy vondrona. Izany dia ahafahanao manangana RBAC ho an'ny mpampiasa anao ary mampiasa auth-proxy mba hiarovana ny Dashboard Kubernetes sy ny rindranasa hafa izay tsy mahay manome alalana ny tenany.
Fametrahana Keycloak
Aoka hatao hoe efa manana mpizara LDAP ianao. Mety ho Active Directory, FreeIPA, OpenLDAP na inona. Raha tsy manana mpizara LDAP ianao, amin'ny ankapobeny dia afaka mamorona mpampiasa mivantana amin'ny interface Keycloak ianao, na mampiasa mpanome oidc ho an'ny daholobe (Google, Github, Gitlab), saika mitovy ny vokatra.
Voalohany indrindra, andao hametraka Keycloak ny tenany, ny fametrahana dia azo atao misaraka, na mivantana amin'ny cluster Kubernetes, raha ny fitsipika, raha manana cluster Kubernetes maromaro ianao dia ho mora kokoa ny mametraka azy misaraka. Amin'ny lafiny iray, azonao ampiasaina foana
Mba hitehirizana data Keycloak dia mila angon-drakitra ianao. Ny default dia h2
(voatahiry eo an-toerana ny angon-drakitra rehetra), fa azo ampiasaina ihany koa postgres
, mysql
na mariadb
.
Raha mbola manapa-kevitra ny hametraka Keycloak misaraka ianao dia afaka mahita torolàlana amin'ny antsipiriany bebe kokoa
Fametrahana federasiona
Voalohany indrindra, andao hamorona fanjakana vaovao. Realm no toeran'ny fampiharana anay. Ny fampiharana tsirairay dia afaka manana ny faritra misy azy miaraka amin'ireo mpampiasa samihafa sy ny fanomezan-dàlana. Ny fanjakana master dia ampiasain'ny Keycloak tenany ary tsy mety ny fampiasana azy amin'ny zavatra hafa.
mpanao gazety Ampio fanjakana
Option
sarobidy
anarana
kubernetes
Anarana isehoana
Kubernetes
HTML Display Name
<img src="https://kubernetes.io/images/nav_logo.svg" width="400" >
Ny Kubernetes dia manamarina raha voamarina na tsia ny mailaka an'ny mpampiasa. Koa satria mampiasa mpizara LDAP manokana izahay, dia saika hiverina foana io fisavana io false
. Andeha hofoanana ny fanehoana an'ity sehatra ity ao amin'ny Kubernetes:
Saran'ny mpanjifa -> karazana verinia -> Mappers -> mailaka voamarina (Fafao)
Andeha isika hanangana ny federasiona, ho amin'izany isika:
Federasiona mpampiasa -> Ampio mpamatsy… -> LDAP
Ity misy ohatra setup ho an'ny FreeIPA:
Option
sarobidy
Anaran'ny fampisehoana Console
freeipa.example.org
Mpivarotra
Red Hat Directory Server
UUID LDAP toetra
ipauniqueid
URL fifandraisana
ldaps://freeipa.example.org
Mpampiasa DN
cn=users,cn=accounts,dc=example,dc=org
Mamatotra DN
uid=keycloak-svc,cn=users,cn=accounts,dc=example,dc=org
Mamatotra ny fahazoan-dàlana
<password>
Avelao ny fanamarinana Kerberos:
on
Fanjakan'i Kerberos:
EXAMPLE.ORG
Talen'ny mpizara:
HTTP/[email protected]
kiheba fanalahidy:
/etc/krb5.keytab
mpampiasa keycloak-svc
dia tsy maintsy noforonina mialoha amin'ny mpizara LDAP.
Raha ny Active Directory, safidio fotsiny Mpivarotra: Active Directory ary ampidirina ho azy ao anatin'ilay endrika ireo fanovana ilaina.
mpanao gazety Save
Andeha isika izao handroso:
Federasiona mpampiasa -> freeipa.example.org -> Mappers -> Fanampin'anarana
Option
sarobidy
Ldap attributes
givenName
Alefaso izao ny sarintany vondrona:
Federasiona mpampiasa -> freeipa.example.org -> Mappers -> mamorona
Option
sarobidy
anarana
groups
Karazana Mapper
group-ldap-mapper
LDAP Groups DN
cn=groups,cn=accounts,dc=example,dc=org
Paikady famerenana ny vondrona mpampiasa
GET_GROUPS_FROM_USER_MEMBEROF_ATTRIBUTE
Mamita ny fananganana federasiona izany, andao hiroso amin'ny fametrahana ny mpanjifa.
Fametrahana mpanjifa
Andao hamorona mpanjifa vaovao (fampiharana iray handray mpampiasa avy amin'ny Keycloak). Andao:
Clients -> mamorona
Option
sarobidy
ID mpanjifa
kubernetes
Karazana fidirana
confidenrial
URL faka
http://kubernetes.example.org/
URI Redirect manankery
http://kubernetes.example.org/*
URL Admin
http://kubernetes.example.org/
Hamorona sehatra ho an'ny vondrona ihany koa izahay:
Saran'ny mpanjifa -> mamorona
Option
sarobidy
Endrika
No template
anarana
groups
Lalana vondrona feno
false
Ary manangàna sarintany ho azy ireo:
Saran'ny mpanjifa -> vondrona -> Mappers -> mamorona
Option
sarobidy
anarana
groups
Karazana Mapper
Group membership
Anarana fitakiana Token
groups
Ankehitriny dia mila mamela ny sarintany vondrona amin'ny sehatry ny mpanjifantsika isika:
Clients -> kubernetes -> Saran'ny mpanjifa -> Saran'ny mpanjifa Default
Mifidy isika vondrona в Sahan'ny mpanjifa misy, gazety Ampio voafantina
Andeha isika hametraka ny fanamarinana ny fampiharana, mankanesa any:
Clients -> kubernetes
Option
sarobidy
Navela ny Fanomezana
ON
Andeha isika hanosika afa-tsy ary izany dia mamita ny fananganana mpanjifa, eo amin'ny tabilao izao
Clients -> kubernetes -> Syndicate
azonao atao Secret izay hampiasaintsika any aoriana.
Fametrahana Kubernetes
Ny fametrahana Kubernetes ho an'ny fanomezan-dàlana OIDC dia tsy dia misy dikany loatra ary tsy zavatra sarotra be. Ny hany tokony hataonao dia ny mametraka ny taratasy fanamarinana CA an'ny mpizara OIDC anao /etc/kubernetes/pki/oidc-ca.pem
ary ampio ny safidy ilaina amin'ny kube-apiserver.
Mba hanaovana izany, fanavaozana /etc/kubernetes/manifests/kube-apiserver.yaml
amin'ny tomponareo rehetra:
...
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
...
Ary havaozy koa ny config kubeadm ao amin'ny cluster mba tsy ho very ireo fanovana ireo mandritra ny fanavaozana:
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
...
Izany dia mamita ny fananganana Kubernetes. Azonao atao ny mamerina ireo dingana ireo amin'ny vondrona Kubernetes rehetra.
Fanomezana voalohany
Aorian'ireo dingana ireo dia efa manana cluster Kubernetes ianao miaraka amin'ny fanomezan-dàlana OIDC namboarina. Ny hany tokana dia ny hoe tsy mbola manana mpanjifa namboarina ny mpampiasa anao, ary koa ny kubeconfig azy manokana. Mba hamahana ity olana ity dia mila manamboatra ny famoahana mandeha ho azy ny kubeconfig ho an'ny mpampiasa ianao aorian'ny fanomezan-dàlana mahomby.
Mba hanaovana izany dia azonao atao ny mampiasa rindranasa tranonkala manokana izay ahafahanao manamarina ny mpampiasa ary avy eo misintona ny kubeconfig efa vita. Ny iray amin'ireo mety indrindra dia
Mba hanitsiana an'i Kuberos dia ampy ny mamaritra ny môdely ho an'ny kubeconfig ary mampandeha azy miaraka amin'ireto marika manaraka ireto:
kuberos https://keycloak.example.org/auth/realms/kubernetes kubernetes /cfg/secret /cfg/template
Raha mila fanazavana fanampiny dia jereo
Azo atao koa ny mampiasa
Ny vokatra kubeconfig dia azo jerena ao amin'ny tranokala users[].user.auth-provider.config.id-token
avy amin'ny kubeconfig anao mankany amin'ny endrika iray ao amin'ny tranokala ary alao avy hatrany ny transcript.
RBAC setup
Rehefa manamboatra RBAC dia azonao atao ny manondro ny anaran'ny mpampiasa (field name
ao amin'ny token'ny jwt) ary ho an'ny vondrona mpampiasa (field groups
amin'ny jwt token). Ity misy ohatra iray amin'ny fametrahana fahazoan-dàlana ho an'ny vondrona 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
Ohatra bebe kokoa momba ny RBAC dia hita ao amin'ny
Fametrahana auth-proxy
Misy tetikasa mahafinaritra
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
Source: www.habr.com