Мо иҷозати LDAP-ро ба Kubernetes мустаҳкам мекунем

Мо иҷозати LDAP-ро ба Kubernetes мустаҳкам мекунем

Як дастури хурд дар бораи чӣ гуна истифода бурдани Keycloak барои пайваст кардани Kubernetes ба сервери LDAP-и худ ва танзими воридоти корбарон ва гурӯҳҳо. Ин ба шумо имкон медиҳад, ки RBAC-ро барои корбарони худ насб кунед ва барои ҳифзи панели Kubernetes ва дигар замимаҳо, ки чӣ тавр худашон иҷозат доданро намедонанд, аз прокси аутентификация истифода баред.

Насби клавиатура

Фарз мекунем, ки шумо аллакай сервери LDAP доред. Он метавонад Active Directory, FreeIPA, OpenLDAP ё ҳама чиз бошад. Агар шумо сервери LDAP надошта бошед, пас шумо метавонед бевосита дар интерфейси Keycloak корбаронро эҷод кунед ё провайдерҳои ҷамъиятии oidc (Google, Github, Gitlab) истифода баред, натиҷа тақрибан якхела хоҳад буд.

Пеш аз ҳама, биёед худи Keycloak-ро насб кунем, насбкунӣ метавонад алоҳида ё бевосита ба кластери Kubernetes анҷом дода шавад, чун қоида, агар шумо якчанд кластерҳои Kubernetes дошта бошед, насб кардани он алоҳида осонтар хоҳад буд. Аз тарафи дигар, шумо ҳамеша метавонед истифода баред диаграммаи расми ва онро бевосита ба кластери худ насб кунед.

Барои нигоҳ доштани маълумоти Keycloak ба шумо базаи маълумот лозим аст. Пешфарз аст h2 (тамоми маълумот ба таври маҳаллӣ нигоҳ дошта мешавад), аммо истифодаи он низ имконпазир аст postgres, mysql ё mariadb.
Агар шумо ба ҳар ҳол қарор кунед, ки Keycloak-ро алоҳида насб кунед, шумо метавонед дастурҳои муфассалро дар ин ҷо пайдо кунед ҳуҷҷатҳои расмӣ.

Таъсиси федератсия

Пеш аз хама, биёед майдони нав созем. Realm фазои барномаи мост. Ҳар як барнома метавонад дорои доираи худ бо корбарони гуногун ва танзимоти авторизатсия бошад. Майдони асосӣ аз ҷониби худи Keycloak истифода мешавад ва истифодаи он барои ҳама чизи дигар нодуруст аст.

Дар ин ҷо зер кунед Майдон илова кунед

интихоб
арзиши

ном
kubernetes

Бозтоби ном
Kubernetes

Номи намоиши HTML
<img src="https://kubernetes.io/images/nav_logo.svg" width="400" >

Kubernetes бо нобаёнӣ тафтиш мекунад, ки почтаи электронии корбар тасдиқ шудааст ё не. Азбаски мо сервери LDAP-и худро истифода мебарем, ин чек қариб ҳамеша бармегардад false. Биёед намояндагии ин танзимотро дар Kubernetes ғайрифаъол кунем:

Доираи муштарӣ -> Имейл -> Харитасозон -> почтаи электронӣ тасдиқ карда шуд (Нест кардан)

Акнун биёед федератсияро ташкил кунем, барои ин мо меравем:

Федератсияи корбарон -> Иловаи провайдер… -> лдап

Дар ин ҷо як намунаи насб барои FreeIPA:

интихоб
арзиши

Номи намоиши консол
freeipa.example.org

Соҳибкор
Red Hat Directory Server

Хусусияти UUID LDAP
ipauniqueid

URL пайваст
ldaps://freeipa.example.org

Корбар DN
cn=users,cn=accounts,dc=example,dc=org

Пайваст кардани DN
uid=keycloak-svc,cn=users,cn=accounts,dc=example,dc=org

Пайвасткунии эътимоднома
<password>

Ба аутентификатсияи Kerberos иҷозат диҳед:
on

Малакути Керберос:
EXAMPLE.ORG

Сарвари сервер:
HTTP/[email protected]

ҷадвали асосӣ:
/etc/krb5.keytab

аъзо keycloak-svc бояд пешакӣ дар сервери LDAP мо сохта шавад.

Дар сурати Active Directory, танҳо интихоб кунед Фурӯшанда: Directory Active ва танзимоти зарурӣ ба шакл ба таври худкор ворид карда мешаванд.

Дар ин ҷо зер кунед Захира

Акнун биёед идома диҳем:

Федератсияи корбарон -> freeipa.example.org -> Харитасозон -> Ном

интихоб
арзиши

Хусусиятҳои Ldap
givenName

Акнун харитасозии гурӯҳҳоро фаъол созед:

Федератсияи корбарон -> freeipa.example.org -> Харитасозон -> сохтан

интихоб
арзиши

ном
groups

Навъи харитасоз
group-ldap-mapper

Гурӯҳҳои LDAP DN
cn=groups,cn=accounts,dc=example,dc=org

Стратегияи ҷустуҷӯи гурӯҳи корбарон
GET_GROUPS_FROM_USER_MEMBEROF_ATTRIBUTE

Ин танзими федератсияро ба анҷом мерасонад, биёед ба танзими муштарӣ гузарем.

Танзимоти муштарӣ

Биёед муштарии нав эҷод кунем (барномае, ки корбаронро аз Keycloak қабул мекунад). Рафтем:

мизоҷони -> сохтан

интихоб
арзиши

ID муштарӣ
kubernetes

Навъи дастрасӣ
confidenrial

URL-и решавӣ
http://kubernetes.example.org/

URI-ҳои дурусти масир
http://kubernetes.example.org/*

URL-и администратор
http://kubernetes.example.org/

Мо инчунин барои гурӯҳҳо майдон эҷод мекунем:

Доираи муштарӣ -> сохтан

интихоб
арзиши

Шаблон
No template

ном
groups

Роҳи пурраи гурӯҳ
false

Ва барои онҳо як харитасоз насб кунед:

Доираи муштарӣ -> гурўњњои -> Харитасозон -> сохтан

интихоб
арзиши

ном
groups

Навъи харитасоз
Group membership

Номи даъвои аломат
groups

Ҳоло мо бояд харитасозии гурӯҳро дар доираи муштарии худ фаъол созем:

мизоҷони -> кубернетҳо -> Доираи муштарӣ -> Мизоҷони пешфарз

Мо интихоб мекунем гурўњњои в Доираи дастраси муштариён, матбуот Иловаи интихобшуда

Акнун биёед аутентификатсияи барномаамонро танзим кунем, ба суроғаи:

мизоҷони -> кубернетҳо

интихоб
арзиши

Авторизатсия фаъол аст
ON

Биёед тела диҳем наҷот ва ин танзимоти муштариро, ҳоло дар ҷадвал ба анҷом мерасонад

мизоҷони -> кубернетҳо -> Шаҳодатномаҳо

ба даст оварда метавонед пинҳонӣ ки мо баъдтар истифода мебарем.

Танзими Kubernetes

Насб кардани Kubernetes барои иҷозати OIDC хеле ночиз аст ва чизи хеле мураккаб нест. Ба шумо танҳо лозим аст, ки сертификати CA-и сервери OIDC-и худро ба он гузоред /etc/kubernetes/pki/oidc-ca.pem ва имконоти заруриро барои kube-apiserver илова кунед.
Барои ин, навсозӣ кунед /etc/kubernetes/manifests/kube-apiserver.yaml дар бораи ҳамаи устодони худ:

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

Ва инчунин конфигуратсияи kubeadm-ро дар кластер навсозӣ кунед, то ин танзимотро ҳангоми навсозӣ гум накунанд:

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

Ин танзимоти Kubernetes -ро анҷом медиҳад. Шумо метавонед ин қадамҳоро дар тамоми кластерҳои Kubernetes такрор кунед.

Иҷозатномаи ибтидоӣ

Пас аз ин қадамҳо, шумо аллакай кластери Kubernetes бо иҷозати OIDC танзим карда мешавад. Ягона нукта дар он аст, ки корбарони шумо то ҳол муштарӣ ва инчунин kubeconfig-и худро танзим накардаанд. Барои ҳалли ин мушкилот, шумо бояд барориши худкори kubeconfig-ро ба корбарон пас аз авторизатсияи муваффақ танзим кунед.

Барои ин, шумо метавонед барномаҳои махсуси вебро истифода баред, ки ба шумо имкон медиҳанд, ки корбарро тасдиқ кунед ва сипас kubeconfig-ро зеркашӣ кунед. Яке аз қулайтарин аст Куберос, он ба шумо имкон медиҳад, ки ҳамаи кластерҳои Kubernetes-ро дар як конфигуратсия тавсиф кунед ва ба осонӣ байни онҳо гузаред.

Барои танзим кардани Kuberos, тасвир кардани қолаби kubeconfig ва иҷро кардани он бо параметрҳои зерин кофӣ аст:

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

Барои тафсилоти бештар нигаред Истифодабарӣ дар Github.

Истифодаи он низ имконпазир аст кубелогин агар шумо хоҳед, ки бевосита дар компютери корбар иҷозат диҳед. Дар ин ҳолат, корбар браузерро бо варақаи иҷозат дар localhost мекушояд.

Дар натиҷа kubeconfig метавонад дар сайт тафтиш карда шавад jwt.io. Танҳо арзишро нусхабардорӣ кунед users[].user.auth-provider.config.id-token аз kubeconfig-и худ ба варақа дар сайт ва дарҳол стенограммаро гиред.

Танзимоти RBAC

Ҳангоми танзими RBAC, шумо метавонед ба ҳарду номи корбар муроҷиат кунед (майдон name дар аломати jwt) ва барои гурӯҳи корбарон (майдон groups бо аломати jwt). Дар ин ҷо мисоли муқаррар кардани иҷозатҳо барои гурӯҳ аст 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

Намунаҳои бештарро барои RBAC дар инҷо пайдо кардан мумкин аст ҳуҷҷатҳои расмии Kubernetes

Танзими аут-прокси

Лоиҳаи аҷибе вуҷуд дорад калид-дарвозабон, ки ба шумо имкон медиҳад, ки ҳама гуна барномаро тавассути иҷозати корбар барои тасдиқи аутентификатсия ба сервери OIDC муҳофизат кунед. Ман ба шумо нишон медиҳам, ки чӣ тавр шумо метавонед онро бо истифода аз панели Kubernetes ҳамчун намуна насб кунед:

панели-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

Манбаъ: will.com

Илова Эзоҳ