Estimasi waktu penyelesaian: 60 menit
Pemilik komponen yang dapat dioperasikan: IACProfil keterampilan: engineer deployment
Infrastructure as Code (IaC) dalam konfigurasi air gap Google Distributed Cloud (GDC) terdiri dari dua sistem:
Config Sync adalah komponen yang digunakan dalam Distributed Cloud Infrastructure as Code (IaC) untuk mengelola resource tingkat cluster dan layanan bersama.
GitLab menghosting repositori Git yang berfungsi sebagai sumber tepercaya (SoT) untuk Config Sync. Cluster target adalah cluster yang dikelola Config Sync dari SoT di repositori.
- GitLab menyertakan sistem peninjauan kode untuk menerapkan persetujuan multi-pihak (MPA) pada perubahan kebijakan dan konfigurasi.
Dua jenis zona berikut terlibat dalam deployment:
- Zona anchor: Zona yang sudah menjadi bagian dari bidang kontrol global. Zona pertama adalah zona anchor deployment.
- Zona yang bergabung: Zona yang bergabung dengan bidang kontrol global.
Config Sync mengelola objek Kubernetes di cluster root-admin dan
organization-admin. Repositori ini dikonfigurasi untuk membaca dari repositori IaC Distributed Cloud yang disediakan oleh GitLab di cluster root-admin utama.
Distributed Cloud menginstal IaC selama proses bootstrap. Jalankan langkah-langkah manual berikut untuk menyelesaikan penyiapan IaC.
23.1. Menyiapkan IaC zona pertama
Bagian ini mencakup langkah-langkah untuk menyiapkan IaC di zona deployment pertama.
23.2. Prasyarat
- Melakukan bootstrapping cluster admin root.
- Buat klien SAML di instance Active Directory Federation Services (ADFS) OC IT sebagai klien federasi identitas di GitLab.
23.3. Akses Hari ke-0 ke GitLab
Buka konsol web GitLab di
https://iac.GDC_URL.GDC_URLadalah domain yang telah ditentukan dalam CIQ.# Use the root kubeconfig of the root admin cluster. export ANCHOR_KUBECONFIG=ANCHOR_ZONE_KUBECONFIG echo https://$(kubectl --kubeconfig $ANCHOR_KUBECONFIG get dnsregistrations \ -n gitlab-system iac -o jsonpath='{.status.fqdn}')Gunakan nama pengguna hari ke-0:
ioadmin.Jalankan perintah berikut untuk mendapatkan sandi:
export IO_ADMIN_PWD=$(kubectl --kubeconfig $ANCHOR_KUBECONFIG \ get secret gitlab-basic-users -n gitlab-system \ -o jsonpath='{.data.admin}' | base64 -d)Login dan buka Menu > Projects > Explore Projects gdch / iac untuk memverifikasi bahwa repositori Git
iactelah dibuat.
23.4. Membuat pengguna administrator
- Buat pengguna administrator khusus di ADFS. Anda tidak boleh menggunakannya untuk tujuan non-administratif dan harus memiliki ekstensi "-ga". Perhatikan bahwa
pengguna administrator awal Anda HARUS menggunakan
emailyang sama di sini dengan yang mereka gunakan di Active Directory Federation Services (ADFS). Jalankan perintah berikut untuk membuat pengguna baru:
export NEW_USER_NAME=NEW_USER_NAME export NEW_USER_USERNAME=NEW_USERNAME export NEW_USER_PWD=NEW_USER_PWD export NEW_USER_EMAIL=NEW_USER_EMAIL export GDC_URL=GDC_URL export TOKEN=$(curl -X POST https://iac.$GDC_URL/oauth/token \ -d "grant_type=password&username=ioadmin&password=${IO_ADMIN_PWD}" \ | jq -r '.access_token') USERID=$(curl -X GET https://iac.$GDC_URL/api/v4/users \ -d access_token=${TOKEN} -d username=ioadmin |\ sed -E 's/.*"id":"?([^,"]*)"?.*/\1/') curl -X POST https://iac.$GDC_URL/api/v4/users \ -d username=${NEW_USER_USERNAME} -d password=${NEW_USER_PWD} -d name=${NEW_USER_NAME} \ -d email=${NEW_USER_EMAIL} -d admin=true -d access_token=${TOKEN} curl -X POST https://iac.$GDC_URL/oauth/revoke \ -d client_id=${USERID} -d "token=${TOKEN}"
23.5. Memperbarui lisensi GitLab
Banyak fitur GitLab memerlukan lisensi "Ultimate" agar dapat berfungsi. Pada langkah ini, Anda akan mengganti lisensi sementara yang dikirimkan bersama GDC dengan lisensi situs itu sendiri. Mengaktifkan GitLab EE dengan file lisensi atau kunci berisi detail lengkap.
Kunci lisensi situs yang Anda terima adalah file teks ASCII yang dienkode base64 dengan ekstensi .gitlab-license. Anda akan menggunakan kunci ini untuk mengaktifkan GitLab.
- Login ke konsol web GitLab sebagai
ioadmin. - Di menu navigasi, pilih Menu, lalu Admin.
- Di menu navigasi, pilih Setelan, lalu Umum.
- Di area Tambahkan Lisensi, tambahkan lisensi dengan mengupload file atau memasukkan kunci.
- Centang kotak Persyaratan Layanan.
- Pilih Tambahkan lisensi.
23.6. Menyiapkan repositori GitLab
ConfigSync mengelola objek Kubernetes di cluster root-admin dan cluster org-admin serta dikonfigurasi untuk membaca dari repositori IaC Distributed Cloud yang disediakan oleh GitLab di cluster root-admin.
Kita perlu menyiapkan folder GitLab awal agar Configsync dapat menggunakan konfigurasi dan menerapkannya ke cluster Kubernetes yang diperlukan.
infrastructure
│ └── zonal
│ └── zones
│ ├── ${anchor_zone_name}
│ ├── root-admin
│ ├── kustomization.yaml
│ └── global
│ └── orgs
│ ├── root
│ ├── kustomization.yaml
Ikuti langkah-langkah untuk membuat struktur file awal:
Buka repositori
iacdari "Menu -> Explore Projects".Buka "Web IDE".
Buat file di
/infrastructure/zonal/zones/${anchor_zone_name}/root-admin/kustomization.yamldengan konten berikut:apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization metadata: name: root-admin-kustomizationKlik tombol "Commit".
Pilih "Commit to the main branch" dan konfirmasi.
23.7. Menyiapkan persetujuan banyak pihak (MPA)
Gunakan bagian ini untuk mengonfigurasi sistem agar mewajibkan persetujuan pada setiap permintaan penggabungan ke repositori iac dan mencegah commit langsung (tanpa membuat permintaan penggabungan) ke cabang main untuk menerapkan persetujuan banyak pihak (MPA).
23.7.1. Mengaktifkan persetujuan permintaan penggabungan di GitLab
Buka repositori
iac.Gunakan IDE web untuk membuat file bernama
CODEOWNERSdi folder root dan tambahkan grup Distributed Cloud sebagai pemilik repositori sebagai langkah pertama:[Repository Owners] * @gdchHanya pengguna yang ditambahkan ke file
CODEOWNERSyang dapat menyetujui permintaan penggabungan di repositoriiac. File generik ini hanya untuk tujuan penyiapan. Petunjuk yang lebih mendetail untuk izin persetujuan terperinci dijelaskan dalam IAC-R0007.Klik tombol Commit.
Pilih Commit to the main branch dan konfirmasi.
Untuk menambahkan lebih banyak pengguna ke file
CODEOWNERS, buat permintaan penggabungan yang akan disetujui oleh pengguna yang ada diCODEOWNERS.
23.8. Menghubungkan Active Directory Federation Services (ADFS) ke GitLab
Anda dapat menghubungkan ADFS ke GitLab dengan klien SAML menggunakan framework Auth GitLab.
Jika Anda menggunakan otoritas sertifikat pribadi untuk penyedia identitas, Anda harus menambahkannya ke instance GitLab. Dapatkan sertifikat CA ADFS versi base64 dan masukkan ke dalam secret.
cat <<EOF > adfs-ca-cert-secret.yaml
apiVersion: v1
data:
tls.crt: ADFS_CA_CERTIFICATE_BASE64
kind: Secret
metadata:
name: adfs-ca-cert-secret
namespace: gitlab-system
type: Opaque
EOF
kubectl apply -f adfs-ca-cert-secret.yaml
23.8.1. Mengonfigurasi ADFS untuk autentikasi SAML
Sebelum Anda menghubungkan GitLab ke ADFS menggunakan konfigurasi helm, ADFS harus membuat klien SAML. Di instance Windows Anda, ikuti langkah-langkah berikut:
Jalankan aplikasi AD FS Management sebagai administrator.
Di direktori AD FS, klik folder Relying Party Trust. Di panel Actions, klik Add Relying Party Trust.

Wizard Tambahkan Kepercayaan Pihak Tepercaya akan terbuka. Untuk langkah pertama, pilih Claims aware, lalu klik Start.

Pilih Masukkan data tentang pihak tepercaya secara manual, lalu klik Berikutnya.

Masukkan beberapa informasi yang dapat dikenali tentang instance ADFS di kolom Display Name dan Notes. Klik Berikutnya.

Lewati langkah Konfigurasi Sertifikat dengan mengklik Berikutnya.
Centang kotak Enable support for the SAML 2.0 WebSSO protocol. Di kolom Relying party SAML 2.0 SSO service URL, masukkan berikut ini:
https://iac.GDC_URL/users/auth/saml/callback.Ganti GDC_URL dengan URL organisasi di GDC.

Beri nama IaC dan tambahkan kode berikut:
https://iac.GDC_URL.sesame.street https://iac.GDC_URL.sesame.street/users/auth/saml/callbackKlik Berikutnya untuk langkah-langkah Konfigurasi ID, Pilih Kebijakan Kontrol Akses, dan Siap Menambahkan Kepercayaan untuk menyelesaikan wizard.
# Replace GDC_URL with the cells URL, for example, bert.sesame.street https://iac.GDC_URL https://iac.GDC_URL/users/auth/saml/callbackLayar akan diperbarui dengan kepercayaan pihak tepercaya yang baru dibuat. Klik kanan item Anda, lalu pilih Edit Claim Issuance Policy.
Klik tombol Tambahkan aturan, di langkah Pilih Jenis Aturan, pilih Template Aturan Klaim dari Kirim Atribut LDAP sebagai Klaim. Klik Berikutnya.
Pada langkah Konfigurasi Aturan Klaim, selesaikan parameter berikut:
- Di kolom Nama aturan klaim, masukkan
Email. - Dalam daftar Attribute Store, pilih Active Directory.
- Di tabel Pemetaan atribut LDAP ke jenis klaim keluar, di
kolom Atribut LDAP, pilih atau ketik
E-Mail-Addresses. Di kolom Jenis klaim keluar dalam tabel, pilih atau ketik
E-Mail Address.
Selesaikan wizard.
- Di kolom Nama aturan klaim, masukkan
Klik tombol Tambahkan aturan.
Klik kanan item, lalu klik Edit Claim Issuance Policy pada item lagi.
Pada langkah Choose Rule Type, pilih Claim Rule Template dari Transform an Incoming Claim. Klik Next.
Pada langkah Konfigurasi Aturan Klaim, selesaikan parameter berikut:
- Di kolom Nama aturan klaim, masukkan
Transform email to nameid. - Di kolom Jenis klaim masuk, pilih atau ketik
E-Mail Address. - Di kolom Outgoing claim type, pilih atau ketik
Name ID. - Di kolom Outgoing name ID format, pilih atau ketik
Persistent Identifier. Pilih opsi Lewati semua nilai klaim.

Selesaikan wizard.
- Di kolom Nama aturan klaim, masukkan
23.8.2. Menambahkan konfigurasi SAML ke GitLab
Bagian ini memberikan langkah-langkah untuk menambahkan konfigurasi SAML ke Gitlab.
23.8.2.1. Mendaftarkan GitLab di penyedia identitas
Buka konfigurasi klien SAML Anda di ADFS. GitLab memerlukan nilai berikut untuk berintegrasi dengan IdP Anda:
assertion_customer_service_url - IdP mengalihkan ke URL ini setelah mengautentikasi pengguna. Tetapkan ke
https://iac.GDC_URL/users/auth/saml/callback.Ganti GDC_URL dengan URL organisasi di GDC.
idp_cert_fingerprint - GitLab menggunakan sidik jari ini untuk memverifikasi sertifikat pesan SAML yang masuk. Untuk menemukan
idp_cert_fingerprintdi ADFS, ikuti langkah-langkah berikut:Jalankan aplikasi
AD FS Managementsebagai administrator.Di struktur direktori AD FS > Service > Certificates, klik folder Certificates. Anda akan melihat sertifikat di bagian Token-signing. Klik kanan sertifikat tersebut, lalu pilih Lihat Sertifikat.
Di jendela Sertifikat, buka tab
Details. Scroll daftar hingga Anda melihat item bernamaThumbprint. Klik item dan salin konten yang ditampilkan di konsol.
idp_sso_target_url- GitLab akan menargetkan endpoint ini saat mengautentikasi dengan SAML. Untuk menemukanidp_sso_target_urldi ADFS, ikuti langkah-langkah berikut:Jalankan aplikasi AD FS Management sebagai administrator.
Klik folder Endpoints di struktur direktori AD FS > Service
Endpoints.
Di layar tengah, cari baris dengan jenis SAML 2.0/WS-Federation. Endpoint target adalah URL ADFS dan endpoint target. Misalnya, jika nama domain instance Anda adalah
https://ocit.gdch.test/, dan endpoint target adalah/adfs/ls, makaidp_sso_target_urladalahhttps://ocit.gdch.test/adfs/ls.
issuer- URL yang digunakan GitLab untuk mengidentifikasi dirinya sendiri. Gunakanhttps://iac.GDC_URL.Siapkan nilai IdP sebelumnya dan tulis ke konfigurasi kustom yang disebut
custom_saml.yaml. Edit file YAML ini untuk mendapatkan konfigurasi yang diperlukan untuk klien SAML Anda.cat <<EOF > custom_saml.yaml name: saml label: "ADFS SAML" # This is the label the login button will use. args: assertion_consumer_service_url: "https://iac.GDC_URL/users/auth/saml/callback" idp_cert_fingerprint: "ADFS_IDP_CERT_FINGERPRINT" idp_sso_target_url: "ADFS_IDP_SSO_TARGET_URL" issuer: "https://iac.GDC_URL" # These parameters are necessary for ADFS to connect to GitLab. Do not change unless you are sure of what you're doing. name_identifier_format: "urn:oasis:names:tc:SAML:2.0:nameid-format:persistent" attribute_statements: { email: ['http://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress'] } EOFJika sudah siap, terapkan konfigurasi Anda sebagai rahasia yang disebut
custom-gitlab-saml-provider.cat <<EOF > custom-gitlab-saml-provider.yaml apiVersion: v1 data: provider: | $(cat custom_saml.yaml | base64 -w 0) kind: Secret metadata: name: custom-gitlab-saml-provider namespace: gitlab-system annotations: "helm.sh/hook": post-install,post-upgrade "helm.sh/hook-weight": "-5" EOF kubectl apply -f custom-gitlab-saml-provider.yamlAnda dapat menggunakan secret saat membuat
subcomponentoverride.yaml. Pelajari lebih lanjut variabel di dokumentasi GitLab.cat <<EOF > subcomponentoverride.yaml apiVersion: lcm.private.gdc.goog/v1 kind: SubcomponentOverride metadata: name: iac-gitlab namespace: root spec: subComponentRef: "iac-gitlab" backend: operableParameters: omniauth: enabled: true providers: - secret: custom-gitlab-saml-provider certificates: customCAs: - secret: adfs-ca-cert-secret - configMap: trust-store-root-ext EOF kubectl apply -f subcomponentoverride.yaml
Tindakan ini akan membuat penggantian subkomponen. Untuk memverifikasi bahwa konfigurasi telah dibuat, jalankan:
sh
kubectl get subcomponentoverride -n root
Outputnya mirip dengan hal berikut ini:
NAME AGE
iac-gitlab 1s
23.8.2.2. Menginisialisasi pengguna SAML yang pertama kali login
Mengaktifkan SAML akan menghapus login lokal. Pengguna harus mengikuti prosedur akses darurat untuk mengaktifkan kembali login lokal dan mendapatkan akses ke ioadmin kembali.
Admin yang diinisialisasi pertama kali yang dibuat di Membuat pengguna administrator akan berfungsi tanpa modifikasi lebih lanjut sebagai admin. Mereka tidak boleh memiliki akses ke project. Untuk menambahkan pengguna ke project Distributed Cloud, ikuti Mengaktifkan pengguna baru dari ADFS.
23.8.3. Memverifikasi Koneksi ADFS
Periksa status pod
webserviceGitLab:kubectl --kubeconfig $KUBECONFIG get pod -l app=webservice,release=gitlab -n gitlab-systemNAMA SIAP STATUS MEMULAI ULANG USIA gitlab-webservice-default-5d99b4d7c7-9fmln 2/2 Berjalan 0 4m6d gitlab-webservice-default-5d99b4d7c7-w99p4 2/2 Berjalan 0 96 dtk gitlab-webservice-default-7884d4c8b9-qjhtv 2/2 Mengakhiri 0 18 jam Buka
https://iac.GDC_URLdan pastikan Anda melihat layar ini, yang menampilkan tombol ADFS SAML untuk menggunakan login SSO dan tidak ada kolom nama pengguna dan sandi login langsung.Klik ADFS SAML. Pastikan Anda diminta login ke ADFS.
Setelah login ke ADFS, pastikan Anda login ke GitLab, dan sekarang dapat berinteraksi dengan aplikasi.
23.9. Mengunci akun administrator Hari ke-0
Setelah SAML diaktifkan, nonaktifkan autentikasi sandi untuk antarmuka web, lalu reset sandi untuk ioadmin karena akses API tetap ada.
Jalankan skrip berikut.
export KUBECONFIG=/root/release/root-admin/root-admin-kubeconfig export PWD=$(kubectl get secret gitlab-basic-users -n gitlab-system -o yaml \ | grep admin | head -n1 | awk '{print $2}' | xargs echo | base64 -d) export TOKEN=$(curl -X POST https://iac.GDC_URL/oauth/token \ -d "grant_type=password&username=ioadmin&password=${PWD}" \ | jq -r '.access_token') curl -X PUT https://iac.GDC_URL/api/v4/application/settings \ -d access_token=${TOKEN} \ -d password_authentication_enabled_for_web=false NEWPASS=$(cat /dev/urandom | tr -dc 'a-zA-Z0-9' | fold -w 32 | head -n 1) USERID=$(curl -X GET https://iac.GDC_URL/api/v4/users \ -d access_token=${TOKEN} -d username=ioadmin |\ jq -r '.[] | .id') curl -X PUT https://iac.GDC_URL/api/v4/users/${USERID} \ -d access_token=${TOKEN} -d username=ioadmin \ -d "password=${NEWPASS}" \ -d user_id=${USERID} curl -X POST https://iac.GDC_URL/oauth/revoke \ -d client_id=${USERID} -d "token=${TOKEN}"Simpan sandi baru di rahasia
gitlab-basic-users.kubectl patch secret gitlab-basic-users -n gitlab-system --type=json -p'[{"op": "replace", "path": "/data/admin", "value": '"$(echo $NEWPASS | base64 -w0)"'}]'
Gunakan akun di OI ADFS untuk login.
23.10. Menyiapkan IaC zona gabungan
Bagian ini menjelaskan langkah-langkah untuk menyiapkan IaC di zona bergabung dalam deployment.
23.11. Prasyarat
Sebelum menyiapkan zona bergabung, Anda harus mem-bootstrap cluster admin root.
23.12. Mengonfigurasi kredensial configsync
Ikuti langkah-langkah berikut untuk mengonfigurasi kredensial Config Sync:
Hubungkan ke cluster admin root zona anchor.
Ambil kredensial Config Sync:
kubectl --kubeconfig $ANCHOR_KUBECONFIG get secret -n config-management-system iac-creds-replica -o json |\ jq 'del(.metadata.creationTimestamp, .metadata.resourceVersion, .metadata.uid)' > iac-creds-replica.jsonSalin file
iac-creds-replica.json.Hubungkan ke cluster admin root zona yang bergabung.
Tempelkan file
iac-creds-replica.json.Terapkan kredensial Config Sync ke cluster admin root:
# Use the root kubeconfig of the root admin cluster. export JOINING_KUBECONFIG=JOINING_ZONE_KUBECONFIG kubectl --kubeconfig $JOINING_KUBECONFIG apply -f iac-creds-replica.jsonPastikan kredensial Config Sync dikonfigurasi:
kubectl --kubeconfig $JOINING_KUBECONFIG get secret -n config-management-system \ iac-creds-replica -o yaml
23.13. Mengonfigurasi sumber tepercaya Config Sync
Ikuti langkah-langkah berikut untuk mengonfigurasi sumber tepercaya Config Sync:
Hubungkan ke cluster admin root zona anchor.
Dapatkan FQDN GitLab:
export primaryDnsFQDN=$(kubectl --kubeconfig $ANCHOR_KUBECONFIG get DNSRegistration \ -n gitlab-system iac -o jsonpath='{.status.fqdn}')Hubungkan ke cluster admin root zona yang bergabung.
Buat file
SubcomponentOverrideIaC:echo "apiVersion: lcm.private.gdc.goog/v1 kind: SubcomponentOverride metadata: name: iac namespace: root spec: subComponentRef: "iac-configsync" backend: operableParameters: primaryDnsFQDN: ${primaryDnsFQDN}" > iac-subcomponentoverride.yamlKonfigurasi target Config Sync:
kubectl --kubeconfig $JOINING_KUBECONFIG apply -f iac-subcomponentoverride.yamlPastikan repositori Git Config Sync dikonfigurasi:
kubectl --kubeconfig $JOINING_KUBECONFIG get RootSync -n config-management-system \ root-sync -o jsonpath='{.spec.git.repo}'Pastikan Config Sync tidak memiliki error di zona anchor dan zona gabungan.
kubectl --kubeconfig $JOINING_KUBECONFIG get RootSync \ -n config-management-system root-sync \ -o jsonpath='{.status.source.errors[0].errorMessage}'Jika
root-syncberisi error KNV2004, jalur direktori yang digunakan oleh anchor atau zona penggabungan tidak ada di repositoriiac. Temukan direktori yang diperlukan dengan menjalankan:kubectl --kubeconfig $JOINING_KUBECONFIG get RootSync \ -n config-management-system root-sync -o jsonpath='{.spec.git.dir}'Buat output jalur oleh perintah sebelumnya di repositori
iacdan tambahkan filekustomization.yamlgenerik. Kemudian, gabungkan ke cabangmain.Jalankan kembali perintah
get RootSyncasli, untuk memastikan Config Sync tidak memiliki error.