Мал туторијал за тоа како да користите Keycloak за да го поврзете Kubernetes со вашиот LDAP сервер и да поставите увоз на корисници и групи. Ова ќе ви овозможи да поставите RBAC за вашите корисници и да користите auth-proxy за да ја заштитите контролната табла на Kubernetes и другите апликации што не знаат како да се овластат.
Инсталација на тастатурата
Да претпоставиме дека веќе имате LDAP сервер. Може да биде Active Directory, FreeIPA, OpenLDAP или што и да е. Ако немате LDAP сервер, тогаш во принцип можете да креирате корисници директно во интерфејсот Keycloak или да користите јавни oidc провајдери (Google, Github, Gitlab), резултатот ќе биде речиси ист.
Како прво, да го инсталираме самиот Keycloak, инсталацијата може да се изврши одделно, или директно во кластерот Kubernetes, по правило, ако имате неколку кластери на Kubernetes, полесно би било да го инсталирате одделно. Од друга страна, секогаш можете да користите
За да ги зачувате податоците на Keycloak, ќе ви треба база на податоци. Стандардно е h2
(сите податоци се чуваат локално), но исто така е можно да се користат postgres
, mysql
или mariadb
.
Ако сепак одлучите да инсталирате Keycloak одделно, можете да најдете подетални упатства во
Поставување на федерацијата
Како прво, да создадеме ново царство. Кралството е просторот на нашата апликација. Секоја апликација може да има свое подрачје со различни корисници и поставки за авторизација. Главното царство го користи самиот 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
Врзи 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, едноставно изберете Добавувач: 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). Да одиме:
Клиенти -> Креирај
опција
Вредност
ID на клиент
kubernetes
Тип на пристап
confidenrial
URL на корен
http://kubernetes.example.org/
Валидни URI-и за пренасочување
http://kubernetes.example.org/*
УРЛ на администраторот
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. Еден од најзгодните е
За да го конфигурирате Kuberos, доволно е да го опишете шаблонот за kubeconfig и да го извршите со следните параметри:
kuberos https://keycloak.example.org/auth/realms/kubernetes kubernetes /cfg/secret /cfg/template
За повеќе детали видете
Исто така е можно да се користи
Добиената kubeconfig може да се провери на страницата 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 може да се најдат во
Поставување автентик-прокси
Има прекрасен проект
табла-прокси.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