අපි Kubernetes වෙත LDAP අවසරය සවි කරමු

අපි Kubernetes වෙත LDAP අවසරය සවි කරමු

ඔබගේ LDAP සේවාදායකයට Kubernetes සම්බන්ධ කිරීමට සහ පරිශීලකයින් සහ කණ්ඩායම් ආනයනය කිරීමට Keycloak භාවිතා කරන්නේ කෙසේද යන්න පිළිබඳ කුඩා නිබන්ධනයක්. මෙය ඔබට ඔබගේ පරිශීලකයින් සඳහා RBAC පිහිටුවීමට සහ Kubernetes උපකරණ පුවරුව සහ තමන් විසින්ම බලය පවරන්නේ කෙසේදැයි නොදන්නා අනෙකුත් යෙදුම් ආරක්ෂා කිරීමට auth-proxy භාවිතා කිරීමට ඉඩ සලසයි.

යතුරු ආවරණ ස්ථාපනය

ඔබට දැනටමත් 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 හි මෙම සැකසීමේ නිරූපණය අක්‍රිය කරමු:

පාරිභෝගික විෂය පථයන් -> විද්යුත් තැපෑල -> සිතියම්කරුවන් -> විද්‍යුත් තැපෑල සත්‍යාපනය කර ඇත (මකන්න)

දැන් අපි සම්මේලනය පිහිටුවන්න, මේ සඳහා අපි යන්නේ:

පරිශීලක සම්මේලනය -> සපයන්නා එක් කරන්න... -> ldap

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

ඩීඑන් බන්ධනය කරන්න
uid=keycloak-svc,cn=users,cn=accounts,dc=example,dc=org

අක්තපත්‍ර බැඳන්න
<password>

Kerberos සත්‍යාපනයට ඉඩ දෙන්න:
on

Kerberos Realm:
EXAMPLE.ORG

සේවාදායක විදුහල්පති:
HTTP/[email protected]

යතුරු ටැබය:
/etc/krb5.keytab

පරිශීලකයා keycloak-svc අපගේ LDAP සේවාදායකයේ කල්තියා නිර්මාණය කළ යුතුය.

Active Directory නම්, සරලව තෝරන්න විකුණුම්කරු: ක්රියාකාරී නාමාවලිය සහ අවශ්ය සැකසුම් ස්වයංක්රීයව පෝරමයට ඇතුල් කරනු ලැබේ.

තල්ලු කරන්න සුරකින්න

දැන් අපි ඉදිරියට යමු:

පරිශීලක සම්මේලනය -> 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 වෙතින් පරිශීලකයින් ලබා ගන්නා යෙදුමක්) නිර්මාණය කරමු. අපි යමු:

සේවාලාභීන් -> නිර්මාණය

විකල්පය
වටිනාකම

සේවාලාභී හැඳුනුම්පත
kubernetes

ප්‍රවේශ වර්ගය
confidenrial

මූල URL ය
http://kubernetes.example.org/

වලංගු යළි-යොමුවීම් URIs
http://kubernetes.example.org/*

පරිපාලක URL
http://kubernetes.example.org/

අපි කණ්ඩායම් සඳහා විෂය පථයක් ද සාදන්නෙමු:

පාරිභෝගික විෂය පථයන් -> නිර්මාණය

විකල්පය
වටිනාකම

සැකිල්ල
No template

නම
groups

සම්පූර්ණ කණ්ඩායම් මාර්ගය
false

ඔවුන් සඳහා සිතියම්කරුවෙකු සකසන්න:

පාරිභෝගික විෂය පථයන් -> කණ්ඩායම් -> සිතියම්කරුවන් -> නිර්මාණය

විකල්පය
වටිනාකම

නම
groups

සිතියම් වර්ගය
Group membership

ටෝකන හිමිකම් නාමය
groups

දැන් අපට අපගේ සේවාදායක විෂය පථය තුළ කණ්ඩායම් සිතියම්කරණය සක්‍රීය කළ යුතුය:

සේවාලාභීන් -> කුබර්නෙට්ස් -> පාරිභෝගික විෂය පථයන් -> පෙරනිමි සේවාදායක විෂය පථයන්

තෝරන්න කණ්ඩායම් в පවතින සේවාදායක විෂය පථයන්, ඔබන්න තෝරාගත් එකතු කරන්න

දැන් අපි අපගේ යෙදුමේ සත්‍යාපනය සකසමු, වෙත යන්න:

සේවාලාභීන් -> කුබර්නෙට්ස්

විකල්පය
වටිනාකම

අවසරය සබල කර ඇත
ON

අපි තල්ලු කරමු ඉතිරිකර ගන්න සහ මෙය දැන් පටිත්තෙහි, සේවාදායක සැකසුම සම්පූර්ණ කරයි

සේවාලාභීන් -> කුබර්නෙට්ස් -> අක්තපත්ර

ඔබට ලබා ගත හැක රහස් අපි පසුව භාවිතා කරනු ඇත.

Kubernetes වින්‍යාස කිරීම

OIDC අවසරය සඳහා Kubernetes පිහිටුවීම ඉතා සුළු දෙයක් වන අතර ඉතා සංකීර්ණ දෙයක් නොවේ. ඔබ කළ යුත්තේ ඔබේ OIDC සේවාදායකයේ 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 වින්‍යාසය යාවත්කාලීන කරන්න:

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 පොකුරු හරහා මෙම පියවර නැවත නැවතත් කළ හැක.

මූලික අවසරය

මෙම පියවරෙන් පසුව, OIDC අවසරය වින්‍යාස කර ඇති Kubernetes පොකුරක් ඔබට දැනටමත් ඇත. එකම කරුණ නම් ඔබේ පරිශීලකයින්ට තවමත් සේවාලාභියෙකු වින්‍යාස කර නොමැති අතර ඔවුන්ගේම kubeconfig නොවේ. මෙම ගැටළුව විසඳීම සඳහා, ඔබ සාර්ථක අවසරයකින් පසුව පරිශීලකයින්ට kubeconfig ස්වයංක්‍රීයව නිකුත් කිරීම වින්‍යාසගත කළ යුතුය.

මෙය සිදු කිරීම සඳහා, ඔබට පරිශීලකයා සත්‍යාපනය කිරීමට සහ නිමි kubeconfig බාගත කිරීමට ඉඩ සලසන විශේෂ වෙබ් යෙදුම් භාවිතා කළ හැකිය. වඩාත්ම පහසු එකක් වන්නේ කුබෙරෝස්, එය ඔබට සියලු Kubernetes පොකුරු එක් වින්‍යාසයකින් විස්තර කිරීමට සහ ඒවා අතර පහසුවෙන් මාරු වීමට ඉඩ සලසයි.

Kuberos වින්‍යාස කිරීම සඳහා, kubeconfig සඳහා අච්චුව විස්තර කර පහත පරාමිතීන් සමඟ එය ක්‍රියාත්මක කිරීම ප්‍රමාණවත් වේ:

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

වැඩි විස්තර සඳහා බලන්න භාවිතය Github මත.

එය භාවිතා කිරීමට ද හැකි ය kubelogin ඔබට පරිශීලකයාගේ පරිගණකය මත කෙලින්ම අවසර දීමට අවශ්‍ය නම්. මෙම අවස්ථාවේදී, පරිශීලකයා 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 ලියකියවිලි

auth-proxy සැකසීම

අපූරු ව්‍යාපෘතියක් තිබේ යතුරු සළුව-ගේට්ටු මුරකරු, OIDC සේවාදායකයට සත්‍යාපනය කිරීමට පරිශීලකයාට ඉඩ දීමෙන් ඕනෑම යෙදුමක් සුරක්ෂිත කිරීමට ඔබට ඉඩ සලසයි. උදාහරණයක් ලෙස Kubernetes 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

මූලාශ්රය: www.habr.com

අදහස් එක් කරන්න