Geliştirme ve QA ekibi için dinamik ortamlar oluşturmak amacıyla Kubernetes'i kullanıyoruz. Bu yüzden onlara hem kontrol paneli hem de kubectl için kümeye erişim izni vermek istiyoruz. OpenShift'in aksine, vanilya Kubernetes'in yerel kimlik doğrulaması yoktur, bu nedenle bunun için üçüncü taraf araçları kullanırız.
Google OIDC'yi kullanmaya çalıştık ama ne yazık ki başarısız onlara gruplarla başlamak gerekiyordu, bu nedenle GitHub ile entegrasyon bize oldukça uygun oldu. Grup eşleme olmadan gruplara dayalı RBAC politikaları oluşturmak mümkün olmayacaktır.
Peki Kubernetes yetkilendirme sürecimiz görsel olarak nasıl işliyor:
dex-k8s-authenticator isteği Dex'e iletir (dex.k8s.example.com)
Dex GitHub giriş sayfasına yönlendiriyor
GitHub gerekli yetkilendirme bilgilerini oluşturur ve bunu Dex'e gönderir
Dex, alınan bilgiyi dex-k8s-authenticator'a aktarır
Kullanıcı GitHub'dan bir OIDC belirteci alır
dex-k8s-authenticator kubeconfig'e jeton ekler
kubectl jetonu KubeAPIServer'a iletir
KubeAPIServer, iletilen belirteci temel alarak kubectl'e erişimleri döndürür
Kullanıcı kubectl'den erişim sağlıyor
Hazırlık faaliyetleri
Elbette zaten kurulu bir Kubernetes kümemiz var (k8s.example.com) ve ayrıca HELM önceden yüklenmiş olarak gelir. Ayrıca GitHub'da (super-org) bir organizasyonumuz var.
HELM'iniz yoksa yükleyin Çok basit.
Öncelikle GitHub'u kurmamız gerekiyor.
Kuruluş ayarları sayfasına gidin, (https://github.com/organizations/super-org/settings/applications) ve yeni bir uygulama (Yetkili OAuth Uygulaması) oluşturun:
GitHub'da yeni bir uygulama oluşturma
Alanları gerekli URL'lerle doldurun, örneğin:
Ana sayfa URL'si: https://dex.k8s.example.com
Yetkilendirme geri çağırma URL'si: https://dex.k8s.example.com/callback
Bağlantılara dikkat edin, eğik çizgileri kaybetmemek önemlidir.
Tamamlanan bir forma yanıt olarak GitHub, Client ID и Client secret, bunları güvenli bir yerde saklayın, işimize yarayacaklardır (örneğin, kullanıyoruz) Tonoz sırları saklamak için):
Giriş sayfasına gidin (https://login.k8s.example.com) ve GitHub hesabınızı kullanarak giriş yapın:
Giriş sayfası
Giriş sayfası GitHub'a yönlendirildi
Erişim sağlamak için oluşturulan talimatları izleyin
Web sayfasından kopyalayıp yapıştırdıktan sonra küme kaynaklarımızı yönetmek için kubectl'i kullanabiliriz:
kubectl get po
NAME READY STATUS RESTARTS AGE
mypod 1/1 Running 0 3d
kubectl delete po mypod
Error from server (Forbidden): pods "mypod" is forbidden: User "[email protected]" cannot delete pods in the namespace "default"
Ve işe yarıyor, kuruluşumuzdaki tüm GitHub kullanıcıları kaynakları görebilir ve bölmelerde oturum açabilir, ancak bunları değiştirme hakları yoktur.