Við festum LDAP heimild til Kubernetes

Við festum LDAP heimild til Kubernetes

Lítið námskeið um hvernig á að nota Keycloak til að tengja Kubernetes við LDAP netþjóninn þinn og setja upp innflutning á notendum og hópum. Þetta gerir þér kleift að setja upp RBAC fyrir notendur þína og nota auðkenningar-proxy til að vernda Kubernetes Dashboard og önnur forrit sem vita ekki hvernig á að heimila sig.

Keycloak uppsetning

Gerum ráð fyrir að þú sért nú þegar með LDAP netþjón. Það gæti verið Active Directory, FreeIPA, OpenLDAP eða hvað sem er. Ef þú ert ekki með LDAP netþjón, þá í grundvallaratriðum geturðu búið til notendur beint í Keycloak viðmótinu, eða notað opinbera oidc veitendur (Google, Github, Gitlab), niðurstaðan verður næstum sú sama.

Í fyrsta lagi skulum við setja upp Keycloak sjálft, uppsetninguna er hægt að framkvæma sérstaklega, eða beint í Kubernetes klasann, að jafnaði ef þú ert með nokkra Kubernetes klasa væri auðveldara að setja hann upp sérstaklega. Á hinn bóginn geturðu alltaf notað opinbert stýrikort og settu það beint inn í þyrpinguna þína.

Til að geyma Keycloak gögn þarftu gagnagrunn. Sjálfgefið er h2 (öll gögn eru geymd á staðnum), en það er líka hægt að nota postgres, mysql eða mariadb.
Ef þú ákveður samt að setja Keycloak upp sérstaklega geturðu fundið ítarlegri leiðbeiningar í opinber skjöl.

Uppsetning sambandsins

Fyrst af öllu skulum við búa til nýtt ríki. Realm er rými umsóknar okkar. Hvert forrit getur haft sitt eigið svið með mismunandi notendum og heimildarstillingum. Meistararíkið er notað af Keycloak sjálfu og það er rangt að nota það í eitthvað annað.

Ýttu Bæta við ríki

valkostur
gildi

heiti
kubernetes

Sýna nafn
Kubernetes

HTML birtingarnafn
<img src="https://kubernetes.io/images/nav_logo.svg" width="400" >

Kubernetes athugar sjálfgefið hvort tölvupóstur notandans sé staðfestur eða ekki. Þar sem við erum að nota okkar eigin LDAP miðlara mun þessi ávísun næstum alltaf koma aftur false. Slökkum á framsetningu þessarar stillingar í Kubernetes:

Umfang viðskiptavina -> Tölvupóstur -> Kortagerðarmenn -> tölvupóstur staðfestur (Eyða)

Nú skulum við stofna sambandið, fyrir þetta förum við til:

Notendasamband -> Bæta við þjónustuaðila... -> ldap

Hér er dæmi um uppsetningu fyrir FreeIPA:

valkostur
gildi

Sýningarheiti stjórnborðs
freeipa.example.org

Vendor
Red Hat Directory Server

UUID LDAP eiginleiki
ipauniqueid

Slóð tengingar
ldaps://freeipa.example.org

Notanda DN
cn=users,cn=accounts,dc=example,dc=org

Bind DN
uid=keycloak-svc,cn=users,cn=accounts,dc=example,dc=org

Binda skilríki
<password>

Leyfa Kerberos auðkenningu:
on

Kerberos ríki:
EXAMPLE.ORG

Skólastjóri netþjóns:
HTTP/[email protected]

lykilflipi:
/etc/krb5.keytab

Notandi keycloak-svc verður að búa til fyrirfram á LDAP þjóninum okkar.

Ef um er að ræða Active Directory skaltu einfaldlega velja Seljandi: Active Directory og nauðsynlegar stillingar verða settar inn í eyðublaðið sjálfkrafa.

Ýttu Vista

Nú skulum við halda áfram:

Notendasamband -> freeipa.example.org -> Kortagerðarmenn -> Fyrsta nafn

valkostur
gildi

Ldap eiginleikar
givenName

Nú skulum við virkja hópkortlagningu:

Notendasamband -> freeipa.example.org -> Kortagerðarmenn -> Búa til

valkostur
gildi

heiti
groups

Mapper gerð
group-ldap-mapper

LDAP hópar DN
cn=groups,cn=accounts,dc=example,dc=org

Notendahóps sækja stefnu
GET_GROUPS_FROM_USER_MEMBEROF_ATTRIBUTE

Þetta lýkur uppsetningu sambandsins, við skulum halda áfram að setja upp viðskiptavininn.

Uppsetning viðskiptavinar

Búum til nýjan viðskiptavin (forrit sem mun taka á móti notendum frá Keycloak). Förum:

Viðskiptavinir -> Búa til

valkostur
gildi

Auðkenni viðskiptavinar
kubernetes

Aðgangsgerð
confidenrial

Rótarslóð
http://kubernetes.example.org/

Gildar tilvísunar-URI
http://kubernetes.example.org/*

Slóð stjórnanda
http://kubernetes.example.org/

Við munum einnig búa til svigrúm fyrir hópa:

Umfang viðskiptavina -> Búa til

valkostur
gildi

Snið
No template

heiti
groups

Full hópleið
false

Og settu upp kortara fyrir þá:

Umfang viðskiptavina -> hópar -> Kortagerðarmenn -> Búa til

valkostur
gildi

heiti
groups

Tegund kortlagningar
Group membership

Nafn auðkenniskröfu
groups

Nú þurfum við að virkja hópkortlagningu í umfangi viðskiptavina okkar:

Viðskiptavinir -> Kubernetes -> Umfang viðskiptavina -> Sjálfgefin umfang viðskiptavinar

Veldu hópar в Laus viðskiptavinarsviðsmellur Bæta við völdum

Nú skulum við setja upp auðkenningu forritsins okkar, fara á:

Viðskiptavinir -> Kubernetes

valkostur
gildi

Heimild virkjuð
ON

Við skulum ýta vista og þetta lýkur uppsetningu viðskiptavinar, núna á flipanum

Viðskiptavinir -> Kubernetes -> skilríki

þú getur fengið Secret sem við munum nota síðar.

Stillir Kubernetes

Að setja upp Kubernetes fyrir OIDC leyfi er frekar léttvægt og ekki eitthvað mjög flókið. Allt sem þú þarft að gera er að setja CA vottorð OIDC netþjónsins þíns inn í /etc/kubernetes/pki/oidc-ca.pem og bættu við nauðsynlegum valkostum fyrir kube-apiserver.
Til að gera þetta, uppfærðu /etc/kubernetes/manifests/kube-apiserver.yaml á öllum herrum þínum:

...
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
...

Og uppfærðu líka kubeadm stillinguna í þyrpingunni til að missa ekki þessar stillingar meðan á uppfærslunni stendur:

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
...

Þetta lýkur uppsetningu Kubernetes. Þú getur endurtekið þessi skref í öllum Kubernetes þyrpingunum þínum.

Frumheimild

Eftir þessi skref muntu þegar hafa Kubernetes þyrping með OIDC heimild stillt. Eini punkturinn er að notendur þínir hafa ekki enn stilltan biðlara, sem og eigin kubeconfig. Til að leysa þetta vandamál þarftu að stilla sjálfvirka útgáfu kubeconfig til notenda eftir árangursríka heimild.

Til að gera þetta geturðu notað sérstök vefforrit sem gera þér kleift að auðkenna notandann og síðan hlaða niður fullbúnu kubeconfig. Eitt það þægilegasta er Kuberos, það gerir þér kleift að lýsa öllum Kubernetes þyrpingum í einni stillingu og skipta auðveldlega á milli þeirra.

Til að stilla Kuberos er nóg að lýsa sniðmátinu fyrir kubeconfig og keyra það með eftirfarandi breytum:

kuberos https://keycloak.example.org/auth/realms/kubernetes kubernetes /cfg/secret /cfg/template

Fyrir frekari upplýsingar sjá Notkun á Github.

Það er líka hægt að nota kubelogin ef þú vilt heimila beint á tölvu notandans. Í þessu tilviki mun notandinn opna vafra með heimildareyðublaði á localhost.

Hægt er að athuga kubeconfig sem myndast á síðunni jwt.io. Afritaðu bara gildið users[].user.auth-provider.config.id-token úr kubeconfig yfir í eyðublað á síðunni og fáðu afritið strax.

RBAC uppsetning

Þegar þú stillir RBAC geturðu vísað til bæði notendanafnsins (reit name í jwt tákninu) og fyrir hóp notenda (reitur groups í jwt tákni). Hér er dæmi um að setja heimildir fyrir hóp 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

Fleiri dæmi um RBAC má finna í opinber Kubernetes skjöl

Auth-proxy stillt

Þar er stórkostlegt verkefni lyklaklæði-hliðvörður, sem gerir þér kleift að tryggja hvaða forrit sem er með því að leyfa notandanum að auðkenna við OIDC netþjóninn. Ég skal sýna þér hvernig þú getur sett það upp með því að nota Kubernetes mælaborðið sem dæmi:

mælaborð-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

Heimild: www.habr.com

Bæta við athugasemd