ကျလန်ုပ်တို့သည် LDAP ခလင့်ပဌုချက်ကို Kubernetes တလင် ချိတ်ထာသသည်။

ကျလန်ုပ်တို့သည် LDAP ခလင့်ပဌုချက်ကို Kubernetes တလင် ချိတ်ထာသသည်။

Kubernetes ကို သင်၏ LDAP ဆာဗာသို့ ချိတ်ဆက်ရန်နဟင့် အသုံသပဌုသူမျာသနဟင့် အဖလဲ့မျာသ၏ တင်သလင်သမဟုကို ထည့်သလင်သရန်အတလက် စနစ်ထည့်သလင်သရန် Keycloak အသုံသပဌုနည်သအတလက် သင်ခန်သစာငယ်။ ၎င်သသည် သင့်အာသ သင့်အသုံသပဌုသူမျာသအတလက် RBAC စနစ်ထည့်သလင်သရန်နဟင့် Kubernetes Dashboard နဟင့် ၎င်သတို့ကို မည်သို့ခလင့်ပဌုရမည်ကို မသိသော အခဌာသအပလီကေသရဟင်သမျာသကို ကာကလယ်ရန် auth-proxy ကို အသုံသပဌုခလင့်ပေသမည်ဖဌစ်သည်။

သော့ချိတ်တပ်ဆင်ခဌင်သ။

သင့်တလင် LDAP ဆာဗာတစ်ခုရဟိနေပဌီဟု ယူဆကဌပါစို့။ ၎င်သသည် Active Directory၊ FreeIPA၊ OpenLDAP သို့မဟုတ် မည်သို့ပင်ဖဌစ်နိုင်သည်။ သင့်တလင် LDAP ဆာဗာမရဟိပါက၊ မူအရ၊ သင်သည် Keycloak အင်တာဖေ့စ်တလင် အသုံသပဌုသူမျာသကို တိုက်ရိုက်ဖန်တီသနိုင်သည်၊ သို့မဟုတ် အမျာသသူငဟာ oidc ဝန်ဆောင်မဟုပေသသူမျာသ (Google၊ Github၊ Gitlab) ကိုအသုံသပဌုခဌင်သဖဌင့် ရလဒ်သည် အတူတူနီသပါသဖဌစ်လိမ့်မည်။

ပထမညသစလာ၊ Keycloak ကိုယ်တိုင်ထည့်သလင်သကဌပါစို့၊ တပ်ဆင်မဟုကို သီသခဌာသလုပ်ဆောင်နိုင်သည်၊ သို့မဟုတ် Kubernetes အစုအဝေသသို့ တိုက်ရိုက် စည်သကမ်သချက်အနေဖဌင့်၊ သင့်တလင် Kubernetes အစုအဝေသမျာသစလာရဟိပါက၊ ၎င်သကို သီသခဌာသတပ်ဆင်ရန် ပိုမိုလလယ်ကူမည်ဖဌစ်သည်။ တစ်ဖက်ကလည်သ အမဌဲသုံသနိုင်တယ်။ တရာသဝင် ပဲ့စင်ဇယာသ ၎င်သကို သင်၏အစုအဝေသတလင် တိုက်ရိုက်ထည့်သလင်သပါ။

Keycloak ဒေတာကို သိမ်သဆည်သရန်၊ သင်သည် ဒေတာဘေ့စ်တစ်ခု လိုအပ်မည်ဖဌစ်သည်။ ပုံသေကာသ h2 (ဒေတာအာသလုံသကို ပဌည်တလင်သတလင် သိမ်သဆည်သထာသသည်)၊ သို့သော် ၎င်သကို အသုံသပဌုနိုင်သည်။ postgres, mysql သို့မဟုတ် mariadb.
အကယ်၍ သင်သည် Keycloak ကို သီသခဌာသစီ ထည့်သလင်သရန် ဆုံသဖဌတ်ထာသပါက၊ နောက်ထပ် အသေသစိတ် ညလဟန်ကဌာသချက်မျာသကို တလင် သင်ရဟာတလေ့နိုင်ပါသည်။ တရာသဝင်စာရလက်စာတမ်သ.

အဖလဲ့ချုပ်ဖလဲ့စည်သမဟု

ပထမဆုံသအနေနဲ့ နယ်ပယ်အသစ်တစ်ခုကို ဖန်တီသလိုက်ကဌရအောင်။ Realm သည် ကျလန်ုပ်တို့၏ အပလီကေသရဟင်သ၏ နေရာဖဌစ်သည်။ အပလီကေသရဟင်သတစ်ခုစီတလင် မတူညီသောအသုံသပဌုသူမျာသနဟင့် ခလင့်ပဌုချက်ဆက်တင်မျာသဖဌင့် ၎င်သ၏ကိုယ်ပိုင်နယ်ပယ်ရဟိနိုင်သည်။ မာစတာနယ်ပယ်ကို Keycloak ကိုယ်တိုင်က အသုံသပဌုပဌီသ အခဌာသအရာတလေအတလက် အသုံသပဌုတာက မဟာသပါတယ်။

စာနယ်ဇင်သမျာသ နယ်ပယ်ထည့်ပါ။

option ကို
အဘိုသ

အမည်
kubernetes

ဖော်ပဌမည့်အမည်
Kubernetes

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

မူရင်သအာသဖဌင့် Kubernetes သည် အသုံသပဌုသူ၏အီသမေသလ်ကို အတည်ပဌုပဌီသ ဟုတ်မဟုတ် စစ်ဆေသသည်။ ကျလန်ုပ်တို့သည် ကျလန်ုပ်တို့၏ကိုယ်ပိုင် LDAP ဆာဗာကိုအသုံသပဌုနေသောကဌောင့်၊ ကစစ်ဆေသမဟုသည် အမဌဲတမ်သနီသပါသပဌန်လာမည်ဖဌစ်သည်။ false. Kubernetes တလင် ကဆက်တင်၏ ကိုယ်စာသပဌုမဟုကို ပိတ်ထာသကဌပါစို့။

ဖောက်သည် နယ်ပယ်မျာသ -> အီသမေသလ်လိပ်စာ -> မဌေပုံသမာသမျာသ -> အီသမေသလ်ကို အတည်ပဌုပဌီသပါပဌီ။ (ဖျက်)

ကဲ အဖလဲ့ချုပ်ကို တည်ထောင်လိုက်ရအောင်။

အသုံသပဌုသူမျာသအဖလဲ့ချုပ် -> ဝန်ဆောင်မဟုပေသသူကို ထည့်ပါ... -> ldap

ကသည်မဟာ FreeIPA အတလက် နမူနာပုံစံတစ်ခုဖဌစ်သည်။

option ကို
အဘိုသ

Console Display Name
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

Kerberos နယ်မဌေ-
EXAMPLE.ORG

ဆာဗာကျောင်သအုပ်-
HTTP/[email protected]

သော့တဘ်-
/etc/krb5.keytab

အသုံသပဌုသူကို keycloak-svc ကျလန်ုပ်တို့၏ LDAP ဆာဗာတလင် ကဌိုတင်ဖန်တီသထာသရပါမည်။

Active Directory ၏ကိစ္စတလင်၊ ရိုသရဟင်သစလာရလေသချယ်ပါ။ ရောင်သချသူ- Active Directory လိုအပ်သော ဆက်တင်မျာသကို ဖောင်ထဲသို့ အလိုအလျောက် ထည့်သလင်သသလာသပါမည်။

စာနယ်ဇင်သမျာသ ကဌော်ငဌာကို Save လုပ်ရန်

ကဲ ဆက်သလာသကဌရအောင်။

အသုံသပဌုသူမျာသအဖလဲ့ချုပ် -> freeipa.example.org -> မဌေပုံသမာသမျာသ -> နာမည်

option ကို
အဘိုသ

Ldap ဂုဏ်တော်မျာသ
givenName

ယခုအုပ်စုဖလဲ့မဌေပုံကိုဖလင့်ပါ-

အသုံသပဌုသူမျာသအဖလဲ့ချုပ် -> freeipa.example.org -> မဌေပုံသမာသမျာသ -> ဖန်တီသ

option ကို
အဘိုသ

အမည်
groups

Mapper အမျိုသအစာသ
group-ldap-mapper

LDAP အဖလဲ့မျာသ DN
cn=groups,cn=accounts,dc=example,dc=org

User Group Retrieve Strategy
GET_GROUPS_FROM_USER_MEMBEROF_ATTRIBUTE

၎င်သသည် ဖယ်ဒရေသရဟင်သ စနစ်ထည့်သလင်သမဟုကို အပဌီသသတ်ပဌီသ၊ ကလိုင်သယင့် စနစ်ထည့်သလင်သခဌင်သသို့ ဆက်သလာသကဌပါစို့။

Client စနစ်ထည့်သလင်သခဌင်သ။

သုံသစလဲသူအသစ် (Keycloak) မဟ သုံသစလဲသူမျာသကို လက်ခံမည့် အပလီကေသရဟင်သတစ်ခု ဖန်တီသကဌပါစို့။ သလာသကဌရအောင်:

clients -> ဖန်တီသ

option ကို
အဘိုသ

လိုင်သ ID
kubernetes

သုံသခလင့်အမျိုသအစာသ
confidenrial

Root URL
http://kubernetes.example.org/

မဟန်ကန်သော Redirect URI မျာသ
http://kubernetes.example.org/*

စီမံခန့်ခလဲသူ URL
http://kubernetes.example.org/

အဖလဲ့မျာသအတလက် နယ်ပယ်တစ်ခုကိုလည်သ ဖန်တီသပါမည်။

ဖောက်သည် နယ်ပယ်မျာသ -> ဖန်တီသ

option ကို
အဘိုသ

template
No template

အမည်
groups

အုပ်စုလမ်သကဌောင်သအပဌည့်
false

ပဌီသလျဟင် သူတို့အတလက် မဌေပုံဆရာကို သတ်မဟတ်ပါ။

ဖောက်သည် နယ်ပယ်မျာသ -> အုပ်စုတလေ -> မဌေပုံသမာသမျာသ -> ဖန်တီသ

option ကို
အဘိုသ

အမည်
groups

Mapper အမျိုသအစာသ
Group membership

တိုကင်တောင်သဆိုမဟုအမည်
groups

ယခု ကျလန်ုပ်တို့သည် ကျလန်ုပ်တို့၏ client နယ်ပယ်တလင် အုပ်စုဖလဲ့မဌေပုံကို ဖလင့်ရန် လိုအပ်ပါသည်-

clients -> Kubernetes -> ဖောက်သည် နယ်ပယ်မျာသ -> မူရင်သ Client နယ်ပယ်မျာသ

ရလေသချယ်ခဌင်သ အုပ်စုတလေ в ရနိုင်သော Client နယ်ပယ်မျာသ, နဟိပ်ပါ ရလေသထည့်ပါ။

ယခုကျလန်ုပ်တို့၏အပလီကေသရဟင်သ၏စစ်မဟန်ကဌောင်သအထောက်အထာသပဌခဌင်သကိုသတ်မဟတ်ကဌပါစို့၊ သို့သလာသပါ-

clients -> Kubernetes

option ကို
အဘိုသ

ခလင့်ပဌုချက်ဖလင့်ထာသသည်။
ON

တလန်သလိုက်ကဌရအောင် ကယ်ဆယ် ၎င်သသည် ကလိုင်သယင့်စနစ်ထည့်သလင်သခဌင်သကို ပဌီသမဌောက်စေသည်၊ ယခု တက်ဘ်ပေါ်ရဟိ

clients -> Kubernetes -> အခလင့်အာဏာ

သင်ရနိုင်သည်။ လျဟို့ဝဟက်ချက် နောက်မဟသုံသပါမည်။

Kubernetes ကို ပဌင်ဆင်ခဌင်သ

ODC ခလင့်ပဌုချက်အတလက် Kubernetes ကို စနစ်ထည့်သလင်သခဌင်သသည် အလလန်အသေသအဖလဲဖဌစ်ပဌီသ အလလန်ရဟုပ်ထလေသသောအရာမဟုတ်ပါ။ သင်လုပ်ရန်လိုအပ်သည်မဟာ သင်၏ ODC ဆာဗာ၏ CA လက်မဟတ်ကို ထည့်ထာသရန်ဖဌစ်သည်။ /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 config ကိုလည်သ အပ်ဒိတ်လုပ်ပါ-

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 အစုအဝေသမျာသအာသလုံသတလင် ကအဆင့်မျာသကို ထပ်လုပ်နိုင်ပါသည်။

ကနညသခလင့်ပဌုချက်

ကအဆင့်မျာသပဌီသနောက်၊ သင့်တလင် ODC ခလင့်ပဌုချက်ဖဌင့် ပဌင်ဆင်သတ်မဟတ်ထာသသော Kubernetes အစုအဝေသတစ်ခု ရဟိနဟင့်ပဌီသဖဌစ်သည်။ တစ်ခုတည်သသောအချက်မဟာ သင့်အသုံသပဌုသူမျာသတလင် ကလိုင်သယင့်အပဌင်အဆင်အပဌင် ၎င်သတို့၏ကိုယ်ပိုင် kubeconfig မရဟိသေသခဌင်သပင်ဖဌစ်သည်။ ကပဌဿနာကိုဖဌေရဟင်သရန်၊ အောင်မဌင်သောခလင့်ပဌုချက်ရရဟိပဌီသနောက် အသုံသပဌုသူမျာသထံသို့ kubeconfig ၏အလိုအလျောက်ထုတ်ပေသခဌင်သကို သင် configure ပဌုလုပ်ရန်လိုအပ်ပါသည်။

ဒါကိုလုပ်ဖို့၊ အသုံသပဌုသူကို စစ်မဟန်ကဌောင်သအထောက်အထာသပဌပဌီသ အပဌီသသတ် kubeconfig ကို ဒေါင်သလုဒ်လုပ်ခလင့်ပဌုတဲ့ အထူသဝဘ်အက်ပ်တလေကို သင်အသုံသပဌုနိုင်ပါတယ်။ အဆင်ပဌေဆုံသတစ်ခုကတော့ Kuberos၎င်သသည် သင်အာသ config တစ်ခုတလင် Kubernetes အစုအဝေသအာသလုံသကို ဖော်ပဌနိုင်ပဌီသ ၎င်သတို့ကဌာသတလင် လလယ်ကူစလာပဌောင်သနိုင်စေပါသည်။

Kuberos ကို configure လုပ်ရန်၊ kubeconfig အတလက် နမူနာပုံစံကို ဖော်ပဌပဌီသ အောက်ပါ parameters မျာသဖဌင့် run ရန် လုံလောက်ပါသည်။

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

အသေသစိတ်အချက်အလက်မျာသကို ကဌည့်ရဟုပါ။ အသုံသပဌုမဟု Github တလင်

အသုံသပဌုရန်လည်သ ဖဌစ်နိုင်သည်။ kubelogin အသုံသပဌုသူ၏ကလန်ပျူတာပေါ်တလင် တိုက်ရိုက်ခလင့်ပဌုလိုပါက။ ကကိစ္စတလင်၊ အသုံသပဌုသူသည် localhost တလင် ခလင့်ပဌုချက်ဖောင်တစ်ခုပါသော ဘရောက်ဆာကို ဖလင့်ပါမည်။

ရလဒ် kubeconfig ကို site တလင်စစ်ဆေသနိုင်သည်။ jwt.io. တန်ဖိုသကို ကူသယူလိုက်ရုံပါပဲ။ users[].user.auth-provider.config.id-token သင်၏ kubeconfig မဟ ဆိုက်ပေါ်ရဟိ ဖောင်တစ်ခုသို့ ချက်ခဌင်သ စာသာသမဟတ်တမ်သကို ရယူပါ။

RBAC စနစ်ထည့်သလင်သမဟု

RBAC ကို configure လုပ်သောအခါ၊ အသုံသပဌုသူအမည် (အကလက် နဟစ်ခုလုံသကို ကိုသကာသနိုင်သည်။ 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 စာရလက်စာတမ်သ

auth-proxy သတ်မဟတ်ခဌင်သ။

အံ့သဌစရာကောင်သတဲ့ ပရောဂျက်တစ်ခုရဟိတယ်။ သော့ခတ်-တံခါသစောင့်အသုံသပဌုသူကို ODC ဆာဗာသို့ စစ်မဟန်ကဌောင်သအထောက်အထာသပဌရန် ခလင့်ပဌုခဌင်သဖဌင့် မည်သည့်အက်ပ်ကိုမဆို လုံခဌုံစေနိုင်သည်။ ဥပမာတစ်ခုအနေဖဌင့် Kubernetes Dashboard ကို အသုံသပဌု၍ ၎င်သကို သင်မည်ကဲ့သို့ သတ်မဟတ်နိုင်သည်ကို ကျလန်ုပ်ပဌပါမည်။

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

မဟတ်ချက် Add