Кратак водич о томе како можете да користите Кеицлоак да повежете Кубернетес са вашим ЛДАП сервером и конфигуришете увоз корисника и група. Ово ће вам омогућити да конфигуришете РБАЦ за своје кориснике и користите аутх-проки да заштитите Кубернетес Дасхбоард и друге апликације које не могу да се аутентификују.
Инсталирање Кеицлоак-а
Претпоставимо да већ имате ЛДАП сервер. Ово може бити Ацтиве Дирецтори, ФрееИПА, ОпенЛДАП или било шта друго. Ако немате ЛДАП сервер, онда у принципу можете креирати кориснике директно у Кеицлоак интерфејсу или користити јавне оидц провајдере (Гоогле, Гитхуб, Гитлаб), резултат ће бити скоро исти.
Пре свега, хајде да инсталирамо сам Кеицлоак.Инсталација се може извршити засебно или директно у Кубернетес кластер.По правилу, ако имате неколико Кубернетес кластера, било би лакше да га инсталирате засебно. С друге стране, увек можете користити
За складиштење Кеицлоак података биће вам потребна база података. Подразумевано је h2
(сви подаци се чувају локално), али је такође могуће користити postgres
, mysql
или mariadb
.
Ако ипак одлучите да засебно инсталирате Кеицлоак, детаљнија упутства ћете пронаћи у
Оснивање федерације
Пре свега, хајде да створимо ново царство. Реалм је простор наше апликације. Свака апликација може имати своје подручје са различитим корисницима и поставкама ауторизације. Мастер царство користи сам Кеицлоак и погрешно је користити га за било шта друго.
Притисни Додајте област
опција
вредност
Име
kubernetes
Показати име
Kubernetes
ХТМЛ приказано име
<img src="https://kubernetes.io/images/nav_logo.svg" width="400" >
Кубернетес подразумевано проверава да ли је имејл корисника потврђен или не. Пошто користимо сопствени ЛДАП сервер, ова провера ће се скоро увек вратити false
. Хајде да онемогућимо представљање ове опције у Кубернетес-у:
Опсези клијента -> Е-pošta -> Мапери -> Имејл је верификован (Избриши)
Сада да поставимо федерацију; да бисте то урадили, идите на:
Корисничка федерација -> Додај провајдера… -> лдап
Ево примера подешавања за ФрееИПА:
опција
вредност
Приказано име конзоле
freeipa.example.org
Продавац
Red Hat Directory Server
УУИД ЛДАП атрибут
ipauniqueid
УРЛ везе
ldaps://freeipa.example.org
Корисници ДН
cn=users,cn=accounts,dc=example,dc=org
Бинд ДН
uid=keycloak-svc,cn=users,cn=accounts,dc=example,dc=org
Бинд Цредентиал
<password>
Дозволи Керберос аутентификацију:
on
Керберос царство:
EXAMPLE.ORG
Директор сервера:
HTTP/[email protected]
КеиТаб:
/etc/krb5.keytab
Корисник keycloak-svc
потребно је унапред креирати на нашем ЛДАП серверу.
У случају Ацтиве Дирецтори, само треба да изаберете Добављач: Ацтиве Дирецтори а неопходна подешавања ће се аутоматски унети у образац.
Притисни саве
Сада идемо даље:
Корисничка федерација -> фрееипа.екампле.орг -> Мапери -> Име
опција
вредност
Лдап атрибут
givenName
Сада омогућимо групно мапирање:
Корисничка федерација -> фрееипа.екампле.орг -> Мапери -> Створити
опција
вредност
Име
groups
Тип мапера
group-ldap-mapper
ЛДАП групе ДН
cn=groups,cn=accounts,dc=example,dc=org
Корисничке групе преузимају стратегију
GET_GROUPS_FROM_USER_MEMBEROF_ATTRIBUTE
Сада када је подешавање федерације завршено, пређимо на подешавање клијента.
Подешавање клијента
Хајде да направимо новог клијента (апликацију која ће примати кориснике са Кеицлоак-а). Идемо даље:
Клијенти -> Створити
опција
вредност
ИД клијента
kubernetes
Тип приступа
confidenrial
Роот УРЛ
http://kubernetes.example.org/
Важећи УРИ за преусмеравање
http://kubernetes.example.org/*
Админ УРЛ
http://kubernetes.example.org/
Хајде да направимо и опсег за групе:
Цлиент Сцопес -> Створити
опција
вредност
Шаблон
No template
Име
groups
Пуна путања групе
false
И подесите мапер за њих:
Цлиент Сцопес -> групе -> Мапери -> Створити
опција
вредност
Име
groups
Маппер Типе
Group membership
Назив захтева за токен
groups
Сада морамо да омогућимо групу за мапирање у опсегу нашег клијента:
Клијенти -> кубернетес -> Цлиент Сцопес -> Подразумевани опсег клијента
одабрати групе в Доступни опсеги клијената, притисните Додај изабрано
Сада да конфигуришемо аутентификацију наше апликације, идите на:
Клијенти -> кубернетес
опција
вредност
Ауторизација је омогућена
ON
Хајде да притиснемо сачувати и тиме је подешавање клијента завршено, сада на картици
Клијенти -> кубернетес -> акредитив
можете добити тајна које ћемо даље користити.
Конфигурисање Кубернетеса
Подешавање Кубернетеса за ОИДЦ ауторизацију је прилично тривијално и није много компликовано. Све што треба да урадите је да убаците ЦА сертификат вашег ОИДЦ сервера /etc/kubernetes/pki/oidc-ca.pem
и додајте потребне опције за кубе-аписервер.
Да бисте то урадили, ажурирајте /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
...
Такође, ажурирајте кубеадм конфигурацију у кластеру како не бисте изгубили ова подешавања приликом ажурирања:
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
...
Ово довршава Кубернетес конфигурацију. Можете поновити ове кораке у свим својим Кубернетес кластерима.
Прво овлашћење
Након ових корака, већ ћете имати Кубернетес кластер са конфигурисаним ОИДЦ овлашћењем. Једина ствар је да ваши корисници још немају конфигурисан клијент или сопствену кубецонфиг. Да бисте решили овај проблем, потребно је да конфигуришете аутоматску дистрибуцију кубецонфиг корисницима након успешне ауторизације.
Да бисте то урадили, можете користити посебне веб апликације које вам омогућавају да аутентификујете корисника, а затим преузмете готову кубецонфиг. Један од најпогоднијих је
Да бисте конфигурисали Куберос, само опишите шаблон за кубецонфиг и покрените га са следећим параметрима:
kuberos https://keycloak.example.org/auth/realms/kubernetes kubernetes /cfg/secret /cfg/template
За детаљније информације погледајте
Такође је могуће користити
Добијени кубецонфиг се може проверити на веб локацији users[].user.auth-provider.config.id-token
са вашег кубецонфига у образац на веб локацији и одмах примите транскрипт.
Постављање РБАЦ-а
Када конфигуришете РБАЦ, можете се позвати и на корисничко име (поље name
у токену јвт) и по групи корисника (поље groups
у токену јвт). Ево примера подешавања права за групу kubernetes-default-namespace-admins
:
кубернетес-дефаулт-намеспаце-админс.иамл
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
Више примера за РБАЦ може се наћи у
Подешавање аутх-проксија
Постоји диван пројекат
дасхбоард-проки.иамл
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
Извор: ввв.хабр.цом