Gunakan koneksi kluster untuk terhubung dengan aman ke kluster Kubernetes dengan dukungan Azure Arc

Dengan koneksi kluster, Anda dapat terhubung dengan aman ke kluster Kubernetes dengan dukungan Azure Arc dari mana saja tanpa memerlukan port masuk apa pun untuk diaktifkan pada firewall.

Akses ke apiserver pada kluster Kubernetes dengan Azure Arc aktif memungkinkan skenario berikut:

  • Penelusuran kesalahan dan pemecahan masalah interaktif.
  • Akses kluster ke layanan Azure untuk lokasi kustom dan sumber daya lain yang dibuat di atasnya.

Sebelum memulai, tinjau gambaran umum konseptual fitur koneksi kluster.

Prasyarat

  • Instal atau perbarui Azure CLI ke versi terbaru.

  • Instal versi connectedk8s terbaru ekstensi Azure CLI:

    az extension add --name connectedk8s
    

    Jika Anda sudah menginstal ekstensi connectedk8s, perbarui ekstensi ke versi terbaru:

    az extension update --name connectedk8s
    
  • Ganti tempat penampung dan jalankan perintah di bawah ini untuk mengatur variabel lingkungan yang digunakan dalam dokumen ini:

    CLUSTER_NAME=<cluster-name>
    RESOURCE_GROUP=<resource-group-name>
    ARM_ID_CLUSTER=$(az connectedk8s show -n $CLUSTER_NAME -g $RESOURCE_GROUP --query id -o tsv)
    
  • Selain memenuhi persyaratan jaringan untuk Kubernetes dengan dukungan Arc, aktifkan titik akhir ini untuk akses keluar:

    Titik akhir Port
    *.servicebus.windows.net 443
    guestnotificationservice.azure.com, *.guestnotificationservice.azure.com 443

    Catatan

    Untuk menerjemahkan *.servicebus.windows.net kartubebas ke titik akhir tertentu, gunakan perintah \GET https://guestnotificationservice.azure.com/urls/allowlist?api-version=2020-01-01&location=<location>. Dalam perintah ini, wilayah harus ditentukan untuk <location> tempat penampung.

Untuk mendapatkan segmen wilayah titik akhir regional, hapus semua spasi dari nama wilayah Azure. Misalnya, wilayah US Timur 2 , nama wilayahnya adalah eastus2.

Misalnya: *.<region>.arcdataservices.com harus berada *.eastus2.arcdataservices.com di wilayah US Timur 2.

Untuk melihat daftar semua wilayah, jalankan perintah ini:

az account list-locations -o table
Get-AzLocation | Format-Table

Mengonfigurasikan autentikasi

Pada kluster berkemampuan Arc yang ada, buat ClusterRoleBinding dengan autentikasi Microsoft Entra, atau token akun layanan.

Opsi autentikasi Microsoft Entra

  1. Dapatkan yang objectId terkait dengan entitas Microsoft Entra Anda.

    • Untuk akun pengguna Microsoft Entra:

      AAD_ENTITY_OBJECT_ID=$(az ad signed-in-user show --query id -o tsv)
      
    • Untuk aplikasi Microsoft Entra:

      AAD_ENTITY_OBJECT_ID=$(az ad sp show --id <id> --query id -o tsv)
      
  2. Otorisasi entitas dengan izin yang sesuai.

    • Jika Anda menggunakan ClusterRoleBinding asli Kubernetes atau RoleBinding untuk pemeriksaan otorisasi pada kluster, dengan kubeconfig file yang menunjuk ke apiserver kluster Anda untuk akses langsung, Anda dapat membuat satu yang dipetakan ke entitas Microsoft Entra (perwakilan layanan atau pengguna) yang perlu mengakses kluster ini. Contohnya:

      kubectl create clusterrolebinding demo-user-binding --clusterrole cluster-admin --user=$AAD_ENTITY_OBJECT_ID
      
    • Jika Anda menggunakan Azure RBAC untuk pemeriksaan otorisasi pada kluster, Anda dapat membuat penetapan peran Azure yang berlaku yang dipetakan ke entitas Microsoft Entra. Contohnya:

      az role assignment create --role "Azure Arc Kubernetes Viewer" --assignee $AAD_ENTITY_OBJECT_ID --scope $ARM_ID_CLUSTER
      az role assignment create --role "Azure Arc Enabled Kubernetes Cluster User Role" --assignee $AAD_ENTITY_OBJECT_ID --scope $ARM_ID_CLUSTER
      

Opsi autentikasi token akun layanan

  1. Dengan file yang kubeconfig menunjuk ke apiserver kluster Kubernetes Anda, jalankan perintah ini untuk membuat akun layanan. Contoh ini membuat akun layanan di namespace default, tetapi Anda dapat mengganti namespace layanan lain untuk default.

    kubectl create serviceaccount demo-user -n default
    
  2. Buat ClusterRoleBinding untuk memberi akun layanan ini izin yang sesuai pada kluster. Jika Anda menggunakan namespace yang berbeda dalam perintah pertama, ganti di sini untuk default.

    kubectl create clusterrolebinding demo-user-binding --clusterrole cluster-admin --serviceaccount default:demo-user
    
  3. Membuat token akun layanan:

    kubectl apply -f - <<EOF
    apiVersion: v1
    kind: Secret
    metadata:
      name: demo-user-secret
      annotations:
        kubernetes.io/service-account.name: demo-user
    type: kubernetes.io/service-account-token
    EOF
    
    TOKEN=$(kubectl get secret demo-user-secret -o jsonpath='{$.data.token}' | base64 -d | sed 's/$/\n/g')
    
  4. Dapatkan token ke output ke konsol

    echo $TOKEN
    

Mengakses kluster Anda dari perangkat klien

Sekarang Anda dapat mengakses kluster dari klien yang berbeda. Jalankan langkah-langkah berikut pada perangkat klien lain.

  1. Masuk menggunakan autentikasi Microsoft Entra atau autentikasi token akun layanan.

  2. Dapatkan koneksi kubeconfig kluster yang diperlukan untuk berkomunikasi dengan kluster dari mana saja (bahkan dari luar firewall di sekitar kluster), berdasarkan opsi autentikasi yang digunakan:

    • Jika menggunakan autentikasi Microsoft Entra:

      az connectedk8s proxy -n $CLUSTER_NAME -g $RESOURCE_GROUP
      
    • Jika menggunakan autentikasi token akun layanan:

      az connectedk8s proxy -n $CLUSTER_NAME -g $RESOURCE_GROUP --token $TOKEN
      

      Catatan

      Perintah ini akan membuka proksi dan memblokir shell saat ini.

  3. Dalam sesi shell yang berbeda, gunakan kubectl untuk mengirim permintaan ke kluster:

    kubectl get pods -A
    

Sekarang, Anda akan melihat respons dari kluster yang berisi daftar semua pod di bawah namespace layanan default.

Pembatasan yang diketahui

Gunakan az connectedk8s show untuk memeriksa versi agen Kubernetes yang didukung Arc.

Saat membuat permintaan ke kluster Kubernetes, jika entitas Microsoft Entra yang digunakan adalah bagian dari lebih dari 200 grup, Anda mungkin melihat kesalahan berikut:

You must be logged in to the server (Error:Error while retrieving group info. Error:Overage claim (users with more than 200 group membership) is currently not supported.

Ini adalah keterbatasan yang diketahui. Untuk melewati kesalahan ini:

  1. Buat perwakilan layanan, yang cenderung tidak menjadi anggota lebih dari 200 grup.
  2. Masuk ke Azure CLI dengan perwakilan layanan sebelum menjalankan az connectedk8s proxy perintah.

Langkah berikutnya