Kubernetes'i LDAP sunucunuza bağlamak ve kullanıcıların ve grupların içe aktarımını ayarlamak için Keycloak'ı nasıl kullanacağınıza dair küçük bir eğitim. Bu, kullanıcılarınız için RBAC kurmanıza ve Kubernetes Dashboard'u ve kendilerini nasıl yetkilendireceğini bilmeyen diğer uygulamaları korumak için auth-proxy kullanmanıza olanak tanır.
Keycloak Kurulumu
Zaten bir LDAP sunucunuz olduğunu varsayalım. Active Directory, FreeIPA, OpenLDAP veya her neyse olabilir. Bir LDAP sunucunuz yoksa, prensipte kullanıcıları doğrudan Keycloak arayüzünde oluşturabilir veya genel oidc sağlayıcılarını (Google, Github, Gitlab) kullanabilirsiniz, sonuç neredeyse aynı olacaktır.
Öncelikle Keycloak'ın kendisini kuralım, kurulum ayrı ayrı yapılabileceği gibi doğrudan Kubernetes kümesine de yapılabilir, kural olarak birden fazla Kubernetes kümeniz varsa ayrı ayrı kurmanız daha kolay olacaktır. Öte yandan, her zaman kullanabilirsiniz
Keycloak verilerini depolamak için bir veritabanına ihtiyacınız olacak. Varsayılan: h2
(tüm veriler yerel olarak depolanır), ancak aynı zamanda postgres
, mysql
veya mariadb
.
Yine de Keycloak'ı ayrı olarak yüklemeye karar verirseniz daha ayrıntılı talimatları şurada bulabilirsiniz:
Federasyon kurulumu
Öncelikle yeni bir bölge oluşturalım. Realm uygulamamızın alanıdır. Her uygulamanın farklı kullanıcı ve yetkilendirme ayarlarıyla kendine ait bir alanı olabilir. Ana bölge Keycloak'un kendisi tarafından kullanılır ve onu başka herhangi bir şey için kullanmak yanlıştır.
Tıklayın bölge ekle
seçenek
Özellik
Name
kubernetes
<span style="color:white">Görünen İsim</span>
Kubernetes
HTML Görünen Ad
<img src="https://kubernetes.io/images/nav_logo.svg" width="400" >
Kubernetes varsayılan olarak kullanıcının e-postasının onaylanıp onaylanmadığını kontrol eder. Kendi LDAP sunucumuzu kullandığımız için bu kontrol neredeyse her zaman geri dönecektir. false
. Bu ayarın Kubernetes'teki temsilini devre dışı bırakalım:
İstemci kapsamları -> e-posta -> Haritacılar -> E-posta Doğrulandı (Sil)
Şimdi federasyonu kuralım, bunun için şu adrese gidiyoruz:
Kullanıcı federasyonu -> Sağlayıcı ekle… -> ldap
FreeIPA için örnek bir kurulum:
seçenek
Özellik
Konsol Görünen Adı
freeipa.example.org
Satıcı
Red Hat Directory Server
UUID LDAP özelliği
ipauniqueid
Bağlantı URL'si
ldaps://freeipa.example.org
Kullanıcı DN'si
cn=users,cn=accounts,dc=example,dc=org
DN'yi bağla
uid=keycloak-svc,cn=users,cn=accounts,dc=example,dc=org
Kimlik Bilgisini Bağla
<password>
Kerberos kimlik doğrulamasına izin ver:
on
Kerberos Bölgesi:
EXAMPLE.ORG
Sunucu Sorumlusu:
HTTP/[email protected]
anahtar sekmesi:
/etc/krb5.keytab
Kullanıcı keycloak-svc
LDAP sunucumuzda önceden oluşturulmalıdır.
Active Directory durumunda, yalnızca şunu seçin: Satıcı: Active Directory ve gerekli ayarlar forma otomatik olarak eklenecektir.
Tıklayın İndirim
Şimdi devam edelim:
Kullanıcı federasyonu -> freeipa.example.org -> Haritacılar -> İsim
seçenek
Özellik
Ldap özellikleri
givenName
Şimdi grup eşlemeyi etkinleştirin:
Kullanıcı federasyonu -> freeipa.example.org -> Haritacılar -> oluşturmak
seçenek
Özellik
Name
groups
Eşleyici türü
group-ldap-mapper
LDAP Grupları DN
cn=groups,cn=accounts,dc=example,dc=org
Kullanıcı Grubu Alma Stratejisi
GET_GROUPS_FROM_USER_MEMBEROF_ATTRIBUTE
Bu, federasyon kurulumunu tamamlar, hadi istemci kurulumuna geçelim.
İstemci kurulumu
Yeni bir client (Keycloak'tan kullanıcı alacak bir uygulama) oluşturalım. Hadi gidelim:
Müşteriler -> oluşturmak
seçenek
Özellik
müşteri kimliği
kubernetes
Erişim türü
confidenrial
Kök URL
http://kubernetes.example.org/
Geçerli Yönlendirme URI'leri
http://kubernetes.example.org/*
Yönetici URL'si
http://kubernetes.example.org/
Ayrıca gruplar için bir kapsam oluşturacağız:
İstemci kapsamları -> oluşturmak
seçenek
Özellik
şablon
No template
Name
groups
Tam grup yolu
false
Ve onlar için bir eşleştirici kurun:
İstemci kapsamları -> gruplar -> Haritacılar -> oluşturmak
seçenek
Özellik
Name
groups
Eşleyici Türü
Group membership
Token Talebi Adı
groups
Şimdi müşteri kapsamımızda grup eşlemeyi etkinleştirmemiz gerekiyor:
Müşteriler -> Kubernetes -> İstemci kapsamları -> Varsayılan İstemci Kapsamları
Seçme gruplar в Kullanılabilir İstemci Kapsamlarıbasın Seçileni ekle
Şimdi uygulamamızın kimlik doğrulamasını ayarlayalım, şu adrese gidin:
Müşteriler -> Kubernetes
seçenek
Özellik
Yetkilendirme Etkinleştirildi
ON
Hadi itelim kayıt etmek ve bu, istemci kurulumunu tamamlar, artık sekmededir
Müşteriler -> Kubernetes -> Tanıtım
alabilirsiniz Gizli bunu daha sonra kullanacağız.
Kubernet'leri Yapılandırma
OIDC yetkilendirmesi için Kubernetes'i ayarlamak oldukça önemsizdir ve çok karmaşık bir şey değildir. Tek yapmanız gereken OIDC sunucunuzun CA sertifikasını /etc/kubernetes/pki/oidc-ca.pem
ve kube-apserver için gerekli seçenekleri ekleyin.
Bunu yapmak için güncelleyin /etc/kubernetes/manifests/kube-apiserver.yaml
tüm ustalarınızda:
...
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
...
Ayrıca güncelleme sırasında bu ayarları kaybetmemek için kümedeki kubeadm yapılandırmasını da güncelleyin:
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
...
Bu, Kubernetes kurulumunu tamamlar. Bu adımları tüm Kubernetes kümelerinizde tekrarlayabilirsiniz.
İlk Yetkilendirme
Bu adımlardan sonra zaten OIDC yetkilendirmesi yapılandırılmış bir Kubernetes kümesine sahip olacaksınız. Tek nokta, kullanıcılarınızın henüz kendi kubeconfig'lerinin yanı sıra yapılandırılmış bir istemciye sahip olmamasıdır. Bu sorunu çözmek için, başarılı yetkilendirmenin ardından kubeconfig'in kullanıcılara otomatik olarak verilmesini yapılandırmanız gerekir.
Bunu yapmak için, kullanıcının kimliğini doğrulamanıza ve ardından bitmiş kubeconfig'i indirmenize olanak tanıyan özel web uygulamalarını kullanabilirsiniz. En uygun olanlardan biri
Kuberos'u yapılandırmak için kubeconfig şablonunu tanımlamak ve aşağıdaki parametrelerle çalıştırmak yeterlidir:
kuberos https://keycloak.example.org/auth/realms/kubernetes kubernetes /cfg/secret /cfg/template
Daha fazla ayrıntı için bkz.
Bunu kullanmak da mümkündür
Ortaya çıkan kubeconfig sitede kontrol edilebilir users[].user.auth-provider.config.id-token
kubeconfig'inizden sitedeki bir forma gönderin ve transkripti hemen alın.
RBAC kurulumu
RBAC'ı yapılandırırken hem kullanıcı adına (alan name
jwt belirtecinde) ve bir grup kullanıcı için (alan groups
jwt jetonunda). Burada bir grup için izinlerin ayarlanmasına ilişkin bir örnek verilmiştir kubernetes-default-namespace-admins
:
kubernetes-varsayılan-ad alanı-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 için daha fazla örneği şu adreste bulabilirsiniz:
au-proxy ayarı
Harika bir proje var
gösterge paneli-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
Kaynak: habr.com