แแแแแ แแแแแแแแแ แแแแก แจแแกแแฎแแ, แแฃ แ แแแแ แจแแแแซแแแแ แแแแแแงแแแแ Keycloak Kubernetes-แแก แแฅแแแแก LDAP แกแแ แแแ แแแ แแแกแแแแแจแแ แแแแแ แแ แแแแฎแแแ แแแแแแแกแ แแ แฏแแฃแคแแแแก แแแแแ แขแแก แแแแคแแแฃแ แแชแแแกแแแแก. แแก แกแแจแฃแแแแแแก แแแแชแแแ แแแแแแแคแแแฃแ แแ แแ RBAC แแฅแแแแ แแแแฎแแแ แแแแแแแกแแแแก แแ แแแแแแงแแแแ auth-proxy Kubernetes Dashboard แแ แกแฎแแ แแแแแแแชแแแแแก แแแกแแชแแแแ, แ แแแแแแกแแช แแ แจแแฃแซแแแแ แกแแแฃแแแ แ แแแแแก แแแขแแ แแแแชแแ.
Keycloak แแแกแขแแแแชแแ
แแแแฃแจแแแ, แ แแ แแฅแแแ แฃแแแ แแแฅแแ 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-แจแ:
แแแแแแขแแก แคแแ แแแแแ -> Email -> แแแแแ แแแ -> แแแคแแกแขแ แแแแแกแขแฃแ แแแฃแแแ (แฌแแจแแ)
แแฎแแ แแแแแ แจแแแฅแแแแ แคแแแแ แแชแแ; แแแแกแแแแแก แแแแแแแ:
แแแแฎแแแ แแแแแแ แคแแแแ แแชแแ -> แแ แแแแแแแ แแก แแแแแขแแแโฆ -> Ldap
แแฅ แแแชแแแฃแแแ FreeIPA-แก แแแ แแแแขแ แแแแก แแแแแแแแ:
แแ แฉแแแแแ
แฆแแ แแแฃแแแแ
แแแแกแแแแก แกแแฉแแแแแแแแ แกแแฎแแแ
freeipa.example.org
Vendor
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]
Key Tab:
/etc/krb5.keytab
แแแแฎแแแ แแแแแ keycloak-svc
แฃแแแ แจแแแฅแแแแก แฌแแแแกแฌแแ แฉแแแแก LDAP แกแแ แแแ แแ.
Active Directory-แแก แจแแแแฎแแแแแจแ, แแฅแแแ แฃแแ แแแแ แฃแแแ แแแ แฉแแแ แแแแงแแแแแแ: Active Directory แแ แกแแญแแ แ แแแ แแแแขแ แแแ แแแขแแแแขแฃแ แแ แจแแแขแแแแแ แคแแ แแแจแ.
แแแแฌแแแแฃแแแ แแฅ แแแแแ แฉแแแ
แแฎแแ แแแแแแแแแ:
แแแแฎแแแ แแแแแแ แคแแแแ แแชแแ -> freeipa.example.org -> แแแแแ แแแ -> First Name
แแ แฉแแแแแ
แฆแแ แแแฃแแแแ
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/*
แแแแแแแกแขแ แแขแแ แแก URL
http://kubernetes.example.org/
แแแแแ แแกแแแ แจแแแฅแแแแ แแ แแแแ แฏแแฃแคแแแแกแแแแก:
แแแแแแขแแก แกแคแแ แแแแ -> แจแแฅแแแ
แแ แฉแแแแแ
แฆแแ แแแฃแแแแ
แแแ แแ
No template
แกแแฎแแแ
groups
แกแ แฃแแ แฏแแฃแคแแก แแแ
false
แแ แจแแฅแแแแแ แ แฃแฅแแก แจแแแแแแ แแแแแแแก:
แแแแแแขแแก แกแคแแ แแแแ -> แฏแแฃแคแแแ -> แแแแแ แแแ -> แจแแฅแแแ
แแ แฉแแแแแ
แฆแแ แแแฃแแแแ
แกแแฎแแแ
groups
แ แฃแฅแแแแก แขแแแ
Group membership
แกแแแแแแฃแ แ แกแแฉแแแ แแก แกแแฎแแแ
groups
แแฎแแ แฉแแแ แฃแแแ แแแแแแฅแขแแฃแ แแ แ แฃแแแแแก แฏแแฃแคแ แฉแแแแ แแแแแแขแแก แแแแจแ:
แแแแแแขแแแ -> แแฃแแแ แแแขแแแ -> แแแแแแขแแก แกแคแแ แแแแ -> แแแแแแขแแก แแแแฃแแแกแฎแแแแ แคแแ แแแแแ
แแแ แฉแแแ แฏแแฃแคแแแ ะฒ แฎแแแแแกแแฌแแแแแ แแแแแแขแแก แคแแ แแแแแแแแแญแแ แแ แแแแแแขแแ แแ แฉแแฃแแ
แแฎแแ แแแแแ แแแแแแแแคแแแฃแ แแ แแ แฉแแแแ แแแแแแแชแแแก แแแแแแขแแคแแแแชแแ, แแแแแแแ:
แแแแแแขแแแ -> แแฃแแแ แแแขแแแ
แแ แฉแแแแแ
แฆแแ แแแฃแแแแ
แแแขแแ แแแแชแแ แฉแแ แแฃแแแ
ON
แแแแแญแแ แแ แแแแแ แฉแแแ แแ แแแแ แแแแแแขแแก แแแงแแแแแ แแแกแ แฃแแแ, แแฎแแ แฉแแแแ แแแ
แแแแแแขแแแ -> แแฃแแแ แแแขแแแ -> แ แฌแแฃแแแแแแ แกแแแแแแแแก แแแแแชแแแแก
แจแแ แจแแแแซแแแ แแแแฆแ แกแแแแฃแแแ แ แแแแแกแแช แจแแแแแแ แแแแแแแงแแแแแ.
Kubernetes-แแก แแแแคแแแฃแ แแชแแ
Kubernetes-แแก แแแงแแแแแ OIDC แแแขแแ แแแแชแแแกแแแแก แกแแแแแแ แขแ แแแแแแฃแ แแ แแ แแ แช แแกแ แ แแฃแแ. แงแแแแแคแแ แ แ แแช แแฅแแแ แฃแแแ แแแแแแแแ แแ แแก แแฅแแแแ 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-แแก แงแแแแ แแแแกแขแแ แจแ.
แแแแแแแแ แแแแ แแแขแแ แแแแชแแ
แแ แแแแแฏแแแแก แจแแแแแ, แแฅแแแ แฃแแแ แแแฅแแแแแ 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-แแก แแแขแ แแแแแแแแแแ แจแแแแซแแแแ แแฎแแแแ แแฅ
แแแขแแ แแแแชแแแก แแ แแฅแกแแก แแแงแแแแแ
แแจแแแแแแ แ แแ แแแฅแขแแ
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