Gunakan cluster connect 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 tanpa memerlukan port masuk 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

  • Akun Azure dengan langganan aktif. Buat akun gratis.

  • 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
    
  • Kluster terhubung Kube yang didukung Azure Arc yang sudah ada.

  • 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.

  • 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)
    

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

Misalnya: san-af-<region>-prod.azurewebsites.net harus berada san-af-eastus2-prod.azurewebsites.net di wilayah US Timur 2.

Untuk melihat daftar semua wilayah, jalankan perintah ini:

az account list-locations -o table

Pilihan autentikasi Azure Active Directory

  1. Dapatkan yang objectId terkait dengan entitas Azure Active Directory (Azure AD) Anda.

    • Untuk akun pengguna Azure AD:

      AAD_ENTITY_OBJECT_ID=$(az ad signed-in-user show --query userPrincipalName -o tsv)
      
    • Untuk aplikasi Azure AD:

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

    • Jika Anda menggunakan Kube asli ClusterRoleBinding atau RoleBinding untuk pemeriksaan otorisasi pada kluster, dengan kubeconfig file yang mengarah ke apiserver kluster Anda untuk akses langsung, Anda dapat membuat penetapan peran yang dipetakan ke entitas Microsoft Azure Active Directory (perwakilan layanan atau pengguna) yang perlu mengakses kluster ini. Contoh:

      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 dipetakan ke entitas Microsoft Azure Active Directory. Contoh:

      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 layanan yang berbeda dalam perintah pertama, ganti di sini untuk default.

    kubectl create clusterrolebinding demo-user-binding --clusterrole cluster-admin --serviceaccount default:demo-user
    
  3. Buat 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
    

Akses kluster Anda

  1. Siapkan koneksi kubeconfig kluster yang diperlukan untuk mengakses kluster Anda berdasarkan opsi autentikasi yang digunakan:

    • Jika menggunakan autentikasi Azure AD, setelah masuk ke Azure CLI menggunakan entitas Azure AD yang menarik, dapatkan Cluster Connect kubeconfig yang diperlukan untuk berkomunikasi dengan kluster dari mana saja (bahkan dari luar firewall di sekitar kluster):

      az connectedk8s proxy -n $CLUSTER_NAME -g $RESOURCE_GROUP
      
    • Jika menggunakan autentikasi akun layanan, dapatkan koneksi kubeconfig kluster yang diperlukan untuk berkomunikasi dengan kluster dari mana saja:

      az connectedk8s proxy -n $CLUSTER_NAME -g $RESOURCE_GROUP --token $TOKEN
      
  2. Gunakan kubectl untuk mengirim permintaan ke kluster:

    kubectl get pods
    

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

Batasan umum

Gunakan az connectedk8s show untuk memeriksa versi agen Kubernetes dengan dukungan Arc.

Saat membuat permintaan ke kluster Kubernetes, jika entitas Azure AD 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