Dex adalah layanan identitas yang menggunakan OpenID Connect untuk menangani otentikasi Kubernetes. Ini terhubung ke penyedia identitas pihak ketiga seperti Active Directory, LDAP, dan GitHub. Meskipun server API Kubernetes hanya mendukung satu penyedia identitas dan penerbit token OIDC, penggunaan Dex memungkinkan penggunaan identitas dari berbagai penyedia saat mengautentikasi untuk Kubernetes.
Aplikasi ini diinstal di klaster manajemen Giant Swarm secara default dan juga siap diterapkan di klaster beban kerja.
Selain Dex itu sendiri, aplikasi ini menyediakan Dex K8s Authenticator, yang membantu mengonfigurasi kubectl
untuk klaster yang diautentikasi melalui Dex.
Ada beberapa cara untuk menginstal aplikasi ini.
Anda memberikan konfigurasi Anda melalui file values.yaml
khusus. Berikut adalah contoh penggunaan konektor untuk Azure Active Directory. Contoh konektor lainnya dapat ditemukan di bawah.
isWorkloadCluster : true
services :
kubernetes :
api :
caPem : |
-----BEGIN CERTIFICATE-----
M...=
-----END CERTIFICATE-----
oidc :
expiry :
signingKeys : 6h
idTokens : 30m
customer :
connectors :
- id : customer
connectorName : test
connectorType : microsoft
connectorConfig : |-
clientID: <CLIENT-ID-SET-IN-YOUR-IdP>
clientSecret: <CLIENT-SECRET-SET-IN--YOUR-IdP>
tenant: <TENANT-SET-SET-IN--YOUR-IdP>
redirectURI: https://dex.<CLUSTER>.<BASEDOMAIN>/callback
Beberapa catatan:
.service.kubernetes.api.caPem
adalah sertifikat CA kluster beban kerja Anda dalam format PEM. Di Giant Swarm, Anda dapat mengambil sertifikat ini melalui perintah kubectl gs login, saat membuat sertifikat klien untuk klaster beban kerja. Itu berakhir dalam bentuk yang dikodekan Base46 di file konfigurasi kubectl Anda. Sertifikat CA diperlukan oleh Dex K8s Authenticator.
redirectURI
dalam konfigurasi konektor Anda harus berisi nama host yang tepat untuk masuknya Dex sendiri. Dalam bentuk default, ini berisi nama cluster beban kerja (ganti <CLUSTER>
dengan nama sebenarnya) dan domain dasar (ganti <BASEDOMAIN>
dengan domain dasar yang sesuai).
Jika Anda mengonfigurasi lebih dari satu konektor, pastikan untuk menetapkan id
unik untuk masing-masing konektor. Ketahuilah bahwa versi Dex ini dikonfigurasi untuk mengawali semua nama grup pengguna dengan ID konektor. Jadi, jika id
konektor Anda adalah customer
, keanggotaan dalam devops
grup akan muncul sebagai customer:devops
.
Contoh konfigurasi konektor untuk Keycloak:
- id : customer
connectorName : test
connectorType : oidc
connectorConfig : |-
clientID: <CLIENT-ID-SET-IN-YOUR-IdP>
clientSecret: <CLIENT-SECRET-SET-IN--YOUR-IdP>
insecureEnableGroups: true
scopes:
- email
- groups
- profile
issuer: https://<IDP_ENDPOINT>/auth/realms/master
redirectURI: https://dex.<CLUSTERID>.<BASEDOMAIN>/callback
Contoh konfigurasi konektor untuk GitHub:
- id : customer
connectorName : test
connectorType : github
connectorConfig : |-
clientID: <CLIENT-ID-SET-IN-YOUR-IdP>
clientSecret: <CLIENT-SECRET-SET-IN--YOUR-IdP>
loadAllGroups: false
teamNameField: slug
orgs:
- name: <GITHUB_ORG_NAME>
teams:
- <GITHUB_TEAM_SLUG>
redirectURI: https://dex.<CLUSTERID>.<BASEDOMAIN>/callback
Catatan:
<GITHUB_ORG_NAME>
adalah nama organisasi GitHub Anda. Misalnya bagian myorg
di https://github.com/myorg
.<GITHUB_TEAM_SLUG>
adalah bagian dari URL tim yang mewakili nama tim. Misalnya, bagian my-team
di https://github.com/orgs/myorg/teams/my-team
. Aplikasi ini dipasang di kluster beban kerja, melalui platform aplikasi kami. Sebelum melakukannya, harap buat sumber daya ConfigMap
berikut di namespace yang diberi nama sesuai dengan kluster beban kerja tersebut untuk menyediakan konten file values.yaml
Anda.
apiVersion : v1
kind : ConfigMap
metadata :
name : dex-app-user-values
namespace : <CLUSTER>
data :
values : |
<content of values.yaml>
Kemudian Anda menginstal aplikasi melalui UI web kami, atau Anda akan membuat sumber daya Aplikasi dalam format berikut:
apiVersion : application.giantswarm.io/v1alpha1
kind : App
metadata :
labels :
app.kubernetes.io/name : dex-app
name : dex-app
namespace : <CLUSTER>
spec :
catalog : giantswarm-playground
name : dex-app
namespace : dex
userConfig :
configMap :
name : <CONFIGMAPNAME>
namespace : <CLUSTER>
Catatan:
<CONFIGMAPNAME>
harus diganti dengan nama sumber daya ConfigMap yang ditunjukkan di atas.<CLUSTER>
diganti dengan nama klaster beban kerja Anda.Hasilnya, Anda akan melihat Dex diterapkan di kluster beban kerja Anda.
Aplikasi Dex memperlihatkan antarmuka web, yang dapat diakses melalui https. Oleh karena itu, ini menciptakan ingress, yang perlu dikonfigurasi dengan sertifikat TLS yang ditandatangani oleh otoritas sertifikasi, yang harus dipercaya oleh browser. Aplikasi ini terdiri dari beberapa komponen, yang juga harus dapat berkomunikasi satu sama lain secara internal melalui https. Jadi otoritas sertifikasi yang menandatangani sertifikat juga harus dipercaya oleh masing-masing komponen aplikasi.
Jika otoritas sertifikasi khusus digunakan, otoritas sertifikasi tersebut harus diekspos ke masing-masing komponen aplikasi dan ditetapkan sebagai tepercaya, jika tidak, komponen tersebut tidak akan dapat berkomunikasi satu sama lain dan aplikasi mungkin tidak berfungsi seperti yang diharapkan. Berdasarkan penyiapan cluster, hal ini dapat dicapai dengan memberikan serangkaian nilai tambahan ke konfigurasi aplikasi:
ingress :
tls :
letsencrypt : false
caPemB64 : " base64-encoded CA certificate "
ingress :
tls :
letsencrypt : false
trustedRootCA :
name : " name-of-the property-in-the-secret "
secretName : " name-of-the-custom-ca-secret "
letsencrypt
, rahasia bernama dex-tls
akan dibuat dan disebarkan dengan nilai berkode b64 yang disediakan oleh pengguna. Alternatifnya, pengguna dapat mengatur sendiri pembuatan rahasia ini dan mengaktifkan penggunaannya seperti ini: ingress :
tls :
letsencrypt : false
externalSecret :
enabled : true
Rahasia berikut kemudian perlu diterapkan ke namespace dex
yang sedang berjalan:
apiVersion : v1
kind : Secret
type : kubernetes.io/tls
metadata :
name : dex-tls
data :
ca.crt : ...
tls.crt : ...
tls.key : ...
Jika lalu lintas ke Dex perlu melalui proksi (misalnya saat aplikasi dipasang di kluster pribadi), masing-masing komponen aplikasi perlu disiapkan untuk menggunakan proksi.
Penyiapan proxy dapat diberikan ke aplikasi di bagian tertentu dari peta konfigurasi atau rahasia nilai pengguna dengan konfigurasi aplikasi:
cluster :
proxy :
http : " https://proxy.host:4040 " # hostname of the proxy for HTTP traffic
https : " https://proxy.host:4040 " # hostname of the proxy for HTTPS traffic
noProxy : " kubernetes-api-ip-range " # comma-separated list of hostnames and IP ranges, whose traffic should not go through the proxy. # Kubernetes API IP range needs to be defined here in order for Dex to work correctly
Selain beberapa klien statis yang telah ditentukan sebelumnya, aplikasi Dex juga mendukung kemungkinan untuk menentukan klien statis khusus. Mereka perlu didefinisikan sebagai array objek dalam properti tertentu dari file konfigurasi yaml yang disebut extraStaticClients
. Struktur setiap objek klien statis khusus sama persis dengan Dex hulu:
extraStaticClients :
- id : " client-id "
secret : " client-secret "
trustedPeers :
- " https://example.com "
public : true
name : " client-name-1 "
logoURL : " https://example.com/logo "
- idEnv : " CLIENT_ID "
secretEnv : " CLIENT_SECRET "
redirectURIs :
- " https://example.com/redirect "
name : " client-name-2 "
Catatan:
id
dan idEnv
saling eksklusifsecret
dan secretEnv
saling eksklusifname
id
atau idEnv
secret
atau secretEnv
Klien statis ekstra juga dapat dikonfigurasi sebagai rekan tepercaya dari klien statis yang telah ditentukan sebelumnya:
Tambahkan id klien statis tambahan ke daftar trustedPeers
di klien statis yang telah ditentukan sebelumnya:
staticClients :
dexK8SAuthenticator :
clientAddress : " dex.installation.basedomain.io "
clientSecret : " default-client-dex-authenticator-secret "
trustedPeers :
- " client-id "
extraStaticClients :
- id : " client-id "
name : " client-name-1 "
secret : " client-secret "
Ini akan menghasilkan konfigurasi yang sama:
staticClients :
- id : dex-k8s-authenticator
name : dex-k8s-authenticator
secret : default-client-dex-authenticator-secret
trustedPeers :
- client-id
- id : client-id
name : client-name-1
secret : client-secret
public : true
Duplikasi dicegah jika ID dari rekan tepercaya tambahan sama dengan ID rekan tepercaya yang telah diisi sebelumnya secara otomatis.
Giant Swarm saat ini sedang membangun aplikasi dex
dari cabang proyek aslinya. Kami menerapkan logika tambahan yang menambahkan id konektor sebagai awalan ke grup pengguna. Untuk memperbarui gambar yang digunakan dalam bagan ini, saat ini perlu melakukan langkah-langkah berikut di repo fork kami:
Kemudian di repo ini:
values.yaml
, pastikan bahwa values.schema.json
diperbarui untuk mencerminkan semua nilai dan tipenya dengan benar.master#release#v<major.minor.patch>
, tunggu hingga PR rilis yang sesuai dibuat, setujui, gabungkan.