
Мал туторијал за тоа како да користите 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 и неговото користење за било што друго е погрешно.
Кликни тука Додадете царство
опција
Vrednost
Име
kubernetes
Име на екранот
Kubernetes
HTML Приказно име
<img src="https://kubernetes.io/images/nav_logo.svg" width="400" >
Kubernetes стандардно проверува дали е-поштата на корисникот е потврдена или не. Бидејќи користиме сопствен LDAP сервер, оваа проверка скоро секогаш ќе се враќа false. Ајде да го оневозможиме претставувањето на оваа поставка во Kubernetes:
Опсегот на клиентот -> Е-пошта -> Мапери -> потврдена е-пошта (Избриши)
Сега ајде да ја формираме федерацијата, за ова одиме на:
Корисничка федерација -> Додај провајдер… -> ldap
Еве пример за поставување за FreeIPA:
опција
Vrednost
Прикажано име на конзолата
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/freeipa.example.org@EXAMPLE.ORG
табот за клучеви:
/etc/krb5.keytab
Корисник keycloak-svc мора да се креираат однапред на нашиот LDAP сервер.
Во случај на Active Directory, едноставно изберете Добавувач: Active Directory и потребните поставки автоматски ќе се вметнат во формуларот.
Кликни тука Зачувај
Сега да продолжиме понатаму:
Корисничка федерација -> freeipa.example.org -> Мапери -> Име
опција
Vrednost
Ldap атрибути
givenName
Сега овозможете групно мапирање:
Корисничка федерација -> freeipa.example.org -> Мапери -> Креирај
опција
Vrednost
Име
groups
Тип на мапер
group-ldap-mapper
LDAP Групи DN
cn=groups,cn=accounts,dc=example,dc=org
Стратегија за враќање на корисничка група
GET_GROUPS_FROM_USER_MEMBEROF_ATTRIBUTE
Ова го комплетира поставувањето на федерацијата, ајде да продолжиме со поставување на клиентот.
Поставување на клиентот
Ајде да создадеме нов клиент (апликација која ќе прима корисници од Keycloak). Да одиме:
Клиенти -> Креирај
опција
Vrednost
ID на клиент
kubernetes
Тип на пристап
confidenrial
URL на корен
http://kubernetes.example.org/
Валидни URI-и за пренасочување
http://kubernetes.example.org/*
УРЛ на администраторот
http://kubernetes.example.org/
Исто така, ќе создадеме простор за групи:
Опсегот на клиентот -> Креирај
опција
Vrednost
Шаблон
No template
Име
groups
Целосна групна патека
false
И поставете мапер за нив:
Опсегот на клиентот -> групи -> Мапери -> Креирај
опција
Vrednost
Име
groups
Тип на мапер
Group membership
Име на токен прибарување
groups
Сега треба да овозможиме групно мапирање во опсегот на нашиот клиент:
Клиенти -> кубернети -> Опсегот на клиентот -> Стандарден опсег на клиент
изберете групи в Достапни опсези на клиентикликнете Додадете избрани
Сега ајде да ја поставиме автентикацијата на нашата апликација, одете на:
Клиенти -> кубернети
опција
Vrednost
Овозможено овластување
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 може да се провери на страницата . Само копирајте ја вредноста 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 може да се најдат во
Поставување автентик-прокси
Има прекрасен проект , кој ви овозможува да обезбедите која било апликација со тоа што ќе му дозволите на корисникот да се автентицира на серверот OIDC. Ќе ви покажам како можете да го поставите користејќи ја контролната табла на Kubernetes како пример:
табла-прокси.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
