Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Berlaku untuk: ✔️ AKS Otomatis
Azure Kubernetes Service (AKS) Otomatis memberikan pengalaman Kubernetes terkelola termampukan bagi pengembang, teknisi DevOps, dan insinyur platform. Ideal untuk aplikasi modern dan AI, AKS Otomatis mengotomatiskan penyiapan dan operasi kluster AKS dan menyematkan konfigurasi praktik terbaik. Pengguna dari tingkat keterampilan apa pun dapat memperoleh manfaat dari keamanan, performa, dan ketergantungan AKS Otomatis untuk aplikasi mereka. AKS Automatic juga mencakup SLA kesiapan pod yang menjamin 99,9% operasi kesiapan pod yang memenuhi syarat akan selesai dalam waktu 5 menit, memastikan infrastruktur yang andal dan pemulihan otomatis untuk aplikasi Anda. Panduan cepat ini mengasumsikan pemahaman dasar tentang konsep Kubernetes. Untuk informasi selengkapnya, lihat konsep inti Kubernetes untuk Azure Kubernetes Service (AKS).
Panduan cepat ini akan mengajarkan Anda untuk:
- Buat jaringan virtual.
- Buat identitas terkelola dengan izin melalui jaringan virtual.
- Sebarkan kluster AKS Otomatis privat di jaringan virtual.
- Sambungkan ke klaster privat.
- Jalankan contoh aplikasi multi-kontainer berupa kelompok layanan mikro dan antarmuka web yang mensimulasikan skenario ritel.
Prasyarat
- Jika Anda tidak memiliki akun Azure, buat akun free.
- Azure CLI versi 2.86.0 atau yang lebih baru. Untuk menemukan versi, jalankan
az --versionperintah. Jika Anda perlu menginstal atau meningkatkan, lihat Install Azure CLI.
Nota
Contoh ini membuat kluster AKS Otomatis menggunakan resource azurerm_kubernetes_automatic_cluster dari penyedia AzureRM, yang memerlukan penyedia AzureRM versi v4.81 atau yang lebih baru. Untuk sampel yang setara yang menggunakan penyedia AzAPI, lihat sampel 101-aks-automatic-private-custom-network-azapi .
- Identitas kluster dengan
Network Contributorpenetapan peran bawaan pada subnet server API. - Identitas kluster dengan
Network Contributorpenetapan peran bawaan di jaringan virtual untuk mendukung Penyediaan Otomatis Node. - Identitas pengguna yang mengakses kluster dengan
Azure Kubernetes Service Cluster User RoledanAzure Kubernetes Service RBAC Writer. - Jaringan virtual dengan subnet server API khusus berukuran setidaknya
*/28yang didelegasikan keMicrosoft.ContainerService/managedClusters.- Jika ada Kelompok Keamanan Jaringan (NSG) yang terpasang pada subnet, pastikan bahwa aturan mengizinkan lalu lintas berikut antara simpul dan server API (API server), Azure Load Balancer dan server API (API server), serta komunikasi pod ke pod.
- Jika ada Azure Firewall atau metode pembatasan keluaran atau perangkat lainnya, pastikan aturan jaringan keluar yang diperlukan dan FQDN diizinkan.
- AKS Automatic akan mengaktifkan Azure Policy pada kluster AKS Anda, tetapi Anda harus mendaftarkan terlebih dahulu penyedia sumber daya
Microsoft.PolicyInsightsdalam langganan Anda agar prosesnya lebih lancar. Untuk informasi selengkapnya, lihat penyedia sumber daya Azure dan jenis-jenisnya. - Copot pemasangan ekstensi AKS-preview menggunakan
az extension remove -n aks-preview.
Penting
Mulai dari AKS 1.36, kluster AKS Automatic baru secara bawaan akan mengaktifkan Kubernetes Gateway API melalui add-on perutean aplikasi alih-alih Managed NGINX ingress dengan add-on perutean aplikasi karena penghentian Ingress NGINX upstream.
Kluster otomatis yang ada tidak terdampak, tetapi sebaiknya mulai bermigrasi ke Gateway API Kubernetes melalui add-on perutean aplikasi.
Keterbatasan
Batasan berikut berlaku untuk kluster AKS Otomatis:
- AKS Otomatis umumnya tersedia di region berikut:
australiaeast,austriaeast,belgiumcentral,brazilsouth,canadacentral,centralindia,centralus,chilecentral,denmarkeast,eastasia,eastus,eastus2,francecentral,germanywestcentral,indonesiacentral,israelcentral,italynorth,japaneast,japanwest,koreacentral,malaysiawest,mexicocentral,newzealandnorth,northeurope,norwayeast,polandcentral,southafricanorth,southcentralus,southeastasia,spaincentral,swedencentral,switzerlandnorth,uaenorth,uksouth,westeurope,westus2,westus3.- Kluster AKS Otomatis baru secara default mengaktifkan kumpulan simpul sistem terkelola dan LocalDNS. Anda tidak dapat membuat kluster AKS Otomatis tanpa kumpulan simpul sistem terkelola di wilayah mana pun.
- Kluster Otomatis AKS memiliki penguncian grup sumber daya node yang telah dikonfigurasi sebelumnya, yang tidak mengizinkan perubahan pada grup sumber daya
MC_, mencegah tautan jaringan virtual pada zona Private DNS default. Untuk skenario DNS lintas VNet atau kustom, gunakan jaringan kustom dan DNS privat dengan mengikuti Buat kluster privat Azure Kubernetes Service (AKS) Otomatis dalam jaringan virtual kustom. - Azure CLI versi 2.86.0 atau yang lebih baru diperlukan. Untuk menemukan versi, jalankan
az --versionperintah. Jika Anda perlu menginstal atau meningkatkan, lihat Install Azure CLI. - Ekstensi berikut ini tidak didukung:
- Node Windows tidak didukung.
- Migrasi dari SKU dasar AKS ke SKU otomatis tidak didukung.
- Migrasi antara kluster AKS Otomatis tanpa kumpulan simpul sistem terkelola dan kluster AKS Otomatis dengan kumpulan simpul sistem terkelola tidak didukung.
Tentukan variabel
Tentukan variabel berikut yang digunakan dalam langkah-langkah berikutnya.
RG_NAME=automatic-rg
VNET_NAME=automatic-vnet
CLUSTER_NAME=automatic
IDENTITY_NAME=automatic-uami
LOCATION=eastus
SUBSCRIPTION_ID=$(az account show --query id -o tsv)
Membuat grup sumber daya
Grup sumber daya Azure adalah grup logis tempat sumber daya Azure disebarkan dan dikelola.
Mmebuat grup sumber daya menggunakan perintah buat grup az.
az group create -n ${RG_NAME} -l ${LOCATION}
Contoh output berikut menyerupai pembuatan grup sumber daya yang berhasil:
{
"id": "/subscriptions/<guid>/resourceGroups/automatic-rg",
"location": "canadacentral",
"managedBy": null,
"name": "automatic-rg",
"properties": {
"provisioningState": "Succeeded"
},
"tags": null
}
Membuat jaringan virtual
Buat jaringan virtual menggunakan az network vnet create perintah . Buat subnet server API dan subnet kluster menggunakan perintah az network vnet subnet create.
Saat menggunakan jaringan virtual kustom dengan AKS Otomatis, Anda harus membuat subnet server API. AKS akan mendelegasikan subnet untuk Microsoft.ContainerService/managedClusters atas nama Anda, yang memberikan izin layanan AKS untuk menyuntikkan pod server API dan load balancer internal ke subnet tersebut. Anda tidak dapat menggunakan subnet untuk beban kerja lain, tetapi Anda dapat menggunakannya untuk beberapa kluster AKS yang terletak di jaringan virtual yang sama. Ukuran subnet server API minimum yang didukung adalah /28.
Peringatan
Kluster AKS mencadangkan setidaknya sembilan (9) IP di ruang alamat subnet. Kehabisan alamat IP dapat mencegah penskalaan server API dan menyebabkan pemadaman server API.
az network vnet create --name ${VNET_NAME} \
--resource-group ${RG_NAME} \
--location ${LOCATION} \
--address-prefixes 172.19.0.0/16
az network vnet subnet create --resource-group ${RG_NAME} \
--vnet-name ${VNET_NAME} \
--name apiServerSubnet \
--delegations Microsoft.ContainerService/managedClusters \
--address-prefixes 172.19.0.0/28
az network vnet subnet create --resource-group ${RG_NAME} \
--vnet-name ${VNET_NAME} \
--name userNodeSubnet \
--address-prefixes 172.19.1.0/24
az network vnet subnet create --resource-group ${RG_NAME} \
--vnet-name ${VNET_NAME} \
--name managedSystemNodeSubnet \
--address-prefixes 172.19.0.64/26
Aturan grup keamanan jaringan
Semua lalu lintas dalam jaringan virtual diizinkan secara default. Tetapi jika Anda menambahkan aturan Network Security Group (NSG) untuk membatasi lalu lintas antara subnet yang berbeda, pastikan bahwa aturan keamanan NSG mengizinkan jenis komunikasi berikut:
| Tujuan | Sumber | Protokol | Pelabuhan | Gunakan |
|---|---|---|---|---|
| APIServer Subnet CIDR | subnet simpul pengguna dan subnet simpul sistem | PKT | 443 dan 4443 | Diperlukan untuk mengaktifkan komunikasi antara Node dan server API. |
| APIServer Subnet CIDR | Azure Load Balancer | PKT | 9988 | Diperlukan untuk mengaktifkan komunikasi antara Azure Load Balancer dan server API. Anda juga dapat mengaktifkan semua komunikasi antara Azure Load Balancer dan CIDR Subnet API Server. |
| Simpul CIDR | Simpul CIDR | Semua Protokol | Semua Port | Diperlukan untuk mengaktifkan komunikasi antara Simpul. |
| Simpul CIDR | Pod CIDR | Semua Protokol | Semua Port | Diperlukan untuk Perutean lalu lintas layanan. |
| Pod CIDR | Pod CIDR | Semua Protokol | Semua Port | Diperlukan untuk komunikasi antar Pod dan dari Pod ke Service, termasuk komunikasi DNS. |
Membuat identitas terkelola dan memberinya izin di jaringan virtual
Buat identitas terkelola menggunakan az identity create perintah dan ambil ID utama. Tetapkan peran Kontributor Jaringan pada jaringan virtual ke identitas terkelola az role assignment create menggunakan perintah .
az identity create \
--resource-group ${RG_NAME} \
--name ${IDENTITY_NAME} \
--location ${LOCATION}
IDENTITY_PRINCIPAL_ID=$(az identity show --resource-group ${RG_NAME} --name ${IDENTITY_NAME} --query principalId -o tsv)
az role assignment create \
--scope "/subscriptions/${SUBSCRIPTION_ID}/resourceGroups/${RG_NAME}/providers/Microsoft.Network/virtualNetworks/${VNET_NAME}" \
--role "Network Contributor" \
--assignee-object-id "${IDENTITY_PRINCIPAL_ID}" \
--assignee-principal-type ServicePrincipal
Membuat kluster AKS Otomatis privat di jaringan virtual kustom
Untuk membuat kluster AKS Otomatis privat, gunakan perintah az aks create . Perhatikan penggunaan --enable-private-cluster bendera.
Nota
Anda dapat merujuk ke dokumentasi kluster privat untuk mengonfigurasi opsi lain seperti menonaktifkan FQDN publik kluster dan mengonfigurasi zona DNS privat.
az aks create \
--resource-group ${RG_NAME} \
--name ${CLUSTER_NAME} \
--location ${LOCATION} \
--apiserver-subnet-id "/subscriptions/${SUBSCRIPTION_ID}/resourceGroups/${RG_NAME}/providers/Microsoft.Network/virtualNetworks/${VNET_NAME}/subnets/apiServerSubnet" \
--node-subnet-id "/subscriptions/${SUBSCRIPTION_ID}/resourceGroups/${RG_NAME}/providers/Microsoft.Network/virtualNetworks/${VNET_NAME}/subnets/userNodeSubnet" \
--system-node-subnet-id "/subscriptions/${SUBSCRIPTION_ID}/resourceGroups/${RG_NAME}/providers/Microsoft.Network/virtualNetworks/${VNET_NAME}/subnets/managedSystemNodeSubnet"
--assign-identity "/subscriptions/${SUBSCRIPTION_ID}/resourcegroups/${RG_NAME}/providers/Microsoft.ManagedIdentity/userAssignedIdentities/${IDENTITY_NAME}" \
--sku automatic \
--enable-private-cluster \
--no-ssh-key
Setelah beberapa menit, perintah selesai dan kembalikan informasi berformat JSON tentang kluster.
Menyambungkan ke kluster
Ketika kluster AKS Otomatis dibuat sebagai kluster privat, titik akhir server API tidak memiliki alamat IP publik. Untuk mengelola server API, misalnya melalui kubectl, Anda perlu terhubung melalui komputer yang memiliki akses ke jaringan virtual Azure kluster. Ada beberapa opsi untuk membangun konektivitas jaringan ke kluster privat:
- Buat mesin virtual di jaringan virtual yang sama dengan kluster Otomatis AKS menggunakan
az vm createdengan parameter--vnet-name. - Gunakan komputer virtual di jaringan virtual terpisah dan siapkan peering jaringan virtual.
- Gunakan koneksi Express Route atau VPN.
- Gunakan koneksi titik akhir privat.
Membuat komputer virtual di jaringan virtual yang sama dengan kluster AKS adalah opsi term mudah. ExpressRoute dan VPN menambahkan biaya dan memerlukan kompleksitas jaringan lainnya. Peering jaringan virtual mengharuskan Anda merencanakan rentang CIDR jaringan Anda untuk memastikan tidak ada rentang yang tumpang tindih. Untuk informasi selengkapnya, lihat Opsi untuk menyambungkan ke kluster privat.
Untuk mengelola kluster Kube, gunakan klien baris perintah Kube, kubectl.
kubectl sudah diinstal jika Anda menggunakan Azure Cloud Shell. Untuk menginstal kubectl secara lokal, jalankan perintah az aks install-cli . Kluster Otomatis AKS dikonfigurasi dengan Microsoft Entra ID untuk kontrol akses berbasis peran (RBAC) Kubernetes .
Saat Anda membuat kluster menggunakan Azure CLI, pengguna Anda diperuntukkan peran bawaan untuk Azure Kubernetes Service RBAC Cluster Admin.
Konfigurasikan kubectl untuk terhubung ke kluster Kubernetes menggunakan perintah az aks get-credentials. Perintah ini mengunduh kredensial dan mengonfigurasi CLI Kubernetes untuk menggunakannya.
az aks get-credentials --resource-group ${RG_NAME} --name ${CLUSTER_NAME}
Verifikasi koneksi ke kluster menggunakan perintah kubectl get. Perintah ini menampilkan daftar node kluster.
kubectl get nodes
Contoh output berikut menunjukkan bagaimana Anda diminta untuk masuk.
To sign in, use a web browser to open the page https://microsoft.com/devicelogin and enter the code AAAAAAAAA to authenticate.
Setelah Anda masuk, output sampel berikut menunjukkan kumpulan simpul sistem terkelola. Pastikan status simpul siap.
NAME STATUS ROLES AGE VERSION
aks-hostedpool-16652789-vms1 Ready <none> 19m v1.34.7
aks-hostedpool-16652789-vms2 Ready <none> 19m v1.34.7
aks-hostedpool-16652789-vms3 Ready <none> 19m v1.34.7
aks-system-surge-zq4d2 Ready <none> 19m v1.34.7
Membuat jaringan virtual
File Bicep ini mendefinisikan jaringan virtual.
@description('The location of the managed cluster resource.')
param location string = resourceGroup().location
@description('The name of the virtual network.')
param vnetName string = 'aksAutomaticVnet'
@description('The address prefix of the virtual network.')
param addressPrefix string = '172.19.0.0/16'
@description('The name of the API server subnet.')
param apiServerSubnetName string = 'apiServerSubnet'
@description('The subnet prefix of the API server subnet.')
param apiServerSubnetPrefix string = '172.19.0.0/28'
@description('The name of the user node subnet.')
param userNodeSubnetName string = 'userNodeSubnet'
@description('The subnet prefix of the user node subnet.')
param userNodeSubnetPrefix string = '172.19.1.0/24'
@description('The name of the system node subnet.')
param systemNodeSubnetName string = 'systemNodeSubnet'
@description('The subnet prefix of the system node subnet.')
param systemNodeSubnetPrefix string = '172.19.0.64/26'
// Virtual network with an API server subnet, a user node subnet, and a system node subnet
resource virtualNetwork 'Microsoft.Network/virtualNetworks@2023-09-01' = {
name: vnetName
location: location
properties: {
addressSpace: {
addressPrefixes: [ addressPrefix ]
}
subnets: [
{
name: apiServerSubnetName
properties: {
addressPrefix: apiServerSubnetPrefix
}
}
{
name: userNodeSubnetName
properties: {
addressPrefix: userNodeSubnetPrefix
}
}
{
name: systemNodeSubnetName
properties: {
addressPrefix: systemNodeSubnetPrefix
}
}
]
}
}
output apiServerSubnetId string = resourceId('Microsoft.Network/virtualNetworks/subnets', vnetName, apiServerSubnetName)
output userNodeSubnetId string = resourceId('Microsoft.Network/virtualNetworks/subnets', vnetName, userNodeSubnetName)
output systemNodeSubnetId string = resourceId('Microsoft.Network/virtualNetworks/subnets', vnetName, systemNodeSubnetName)
Simpan file Bicep virtualNetwork.bicep ke komputer lokal Anda.
Penting
File Bicep mengatur param vnetName ke aksAutomaticVnet, param addressPrefix ke 172.19.0.0/16, apiServerSubnetPrefix param ke 172.19.0.0/28, dan apiServerSubnetPrefix param ke 172.19.1.0/24. Jika Anda ingin menggunakan nilai yang berbeda, pastikan untuk memperbarui string ke nilai pilihan Anda.
Sebarkan file Bicep menggunakan Azure CLI.
az deployment group create --resource-group <resource-group> --template-file virtualNetwork.bicep
Semua lalu lintas dalam jaringan virtual diizinkan secara default. Tetapi jika Anda menambahkan aturan Network Security Group (NSG) untuk membatasi lalu lintas antara subnet yang berbeda, pastikan bahwa aturan keamanan NSG mengizinkan jenis komunikasi berikut:
| Tujuan | Sumber | Protokol | Pelabuhan | Gunakan |
|---|---|---|---|---|
| APIServer Subnet CIDR | subnet simpul pengguna dan subnet simpul sistem | PKT | 443 dan 4443 | Diperlukan untuk mengaktifkan komunikasi antara Node dan server API. |
| APIServer Subnet CIDR | Azure Load Balancer | PKT | 9988 | Diperlukan untuk mengaktifkan komunikasi antara Azure Load Balancer dan server API. Anda juga dapat mengaktifkan semua komunikasi antara Azure Load Balancer dan CIDR Subnet API Server. |
| Simpul CIDR | Simpul CIDR | Semua Protokol | Semua Port | Diperlukan untuk mengaktifkan komunikasi antara Simpul. |
| Simpul CIDR | Pod CIDR | Semua Protokol | Semua Port | Diperlukan untuk Perutean lalu lintas layanan. |
| Pod CIDR | Pod CIDR | Semua Protokol | Semua Port | Diperlukan untuk komunikasi antar Pod dan dari Pod ke Service, termasuk komunikasi DNS. |
Buat identitas terkelola
File Bicep ini menentukan identitas terkelola yang ditetapkan pengguna.
param location string = resourceGroup().location
param uamiName string = 'aksAutomaticUAMI'
resource userAssignedManagedIdentity 'Microsoft.ManagedIdentity/userAssignedIdentities@2023-01-31' = {
name: uamiName
location: location
}
output uamiId string = userAssignedManagedIdentity.id
output uamiPrincipalId string = userAssignedManagedIdentity.properties.principalId
output uamiClientId string = userAssignedManagedIdentity.properties.clientId
Simpan file Bicep uami.bicep ke komputer lokal Anda.
Penting
File Bicep mengatur param uamiName ke aksAutomaticUAMI. Jika Anda ingin menggunakan nama identitas yang berbeda, pastikan untuk memperbarui string ke nama pilihan Anda.
Sebarkan file Bicep menggunakan Azure CLI.
az deployment group create --resource-group <resource-group> --template-file uami.bicep
Menetapkan peran Kontributor Jaringan melalui jaringan virtual
File Bicep ini mendefinisikan penetapan peran melalui jaringan virtual.
@description('The name of the virtual network.')
param vnetName string = 'aksAutomaticVnet'
@description('The principal ID of the user assigned managed identity.')
param uamiPrincipalId string
// Get a reference to the virtual network
resource virtualNetwork 'Microsoft.Network/virtualNetworks@2023-09-01' existing ={
name: vnetName
}
// Assign the Network Contributor role to the user assigned managed identity on the virtual network
// '4d97b98b-1d4f-4787-a291-c67834d212e7' is the built-in Network Contributor role definition
// See: https://learn.microsoft.com/en-us/azure/role-based-access-control/built-in-roles/networking#network-contributor
resource networkContributorRoleAssignmentToVirtualNetwork 'Microsoft.Authorization/roleAssignments@2022-04-01' = {
name: guid(uamiPrincipalId, '4d97b98b-1d4f-4787-a291-c67834d212e7', resourceGroup().id, virtualNetwork.name)
scope: virtualNetwork
properties: {
roleDefinitionId: resourceId('Microsoft.Authorization/roleDefinitions', '4d97b98b-1d4f-4787-a291-c67834d212e7')
principalId: uamiPrincipalId
}
}
Simpan file Bicep roleAssignments.bicep ke komputer lokal Anda.
Penting
File Bicep mengatur param vnetName ke aksAutomaticVnet. Jika Anda menggunakan nama jaringan virtual yang berbeda, pastikan untuk memperbarui string ke nama jaringan virtual pilihan Anda.
Sebarkan file Bicep menggunakan Azure CLI. Anda perlu memberikan ID prinsipal identitas pengguna yang ditetapkan.
az deployment group create --resource-group <resource-group> --template-file roleAssignments.bicep \
--parameters uamiPrincipalId=<user assigned identity prinicipal id>
Membuat kluster AKS Otomatis privat di jaringan virtual kustom
File Bicep ini mendefinisikan kluster Otomatis AKS.
Nota
Anda dapat merujuk ke dokumentasi kluster privat untuk mengonfigurasi opsi lain seperti menonaktifkan FQDN publik kluster dan mengonfigurasi zona DNS privat.
@description('The name of the managed cluster resource.')
param clusterName string = 'aksPrivateAutomaticCluster'
@description('The location of the managed cluster resource.')
param location string = resourceGroup().location
@description('The resource ID of the API server subnet.')
param apiServerSubnetId string
@description('The resource ID of the user node subnet.')
param userNodeSubnetId string
@description('The resource ID of the system node subnet.')
param systemNodeSubnetId string
@description('The resource ID of the user assigned managed identity.')
param uamiId string
/// Create the private AKS Automatic cluster using the custom virtual network and user assigned managed identity
resource aks 'Microsoft.ContainerService/managedClusters@2024-03-02-preview' = {
name: clusterName
location: location
sku: {
name: 'Automatic'
}
properties: {
apiServerAccessProfile: {
subnetId: apiServerSubnetId
enablePrivateCluster: true
}
networkProfile: {
outboundType: 'loadBalancer'
}
hostedSystemProfile: {
systemNodeSubnetID: systemNodeSubnetId
nodeSubnetID: userNodeSubnetId
}
}
identity: {
type: 'UserAssigned'
userAssignedIdentities: {
'${uamiId}': {}
}
}
}
Simpan file Bicep aks.bicep ke komputer lokal Anda.
Penting
File Bicep mengatur param clusterName ke aksPrivateAutomaticCluster. Jika Anda menginginkan nama kluster yang berbeda, pastikan untuk memperbarui string ke nama kluster pilihan Anda.
Sebarkan file Bicep menggunakan Azure CLI. Anda perlu memberikan ID sumber daya subnet server API, ID sumber daya subnet simpul pengguna, ID sumber daya subnet simpul sistem, dan ID sumber daya identitas terkelola yang ditetapkan pengguna.
az deployment group create --resource-group <resource-group> --template-file aks.bicep \
--parameters apiServerSubnetId=<API server subnet resource id> \
--parameters nodeSubnetId=<user node subnet resource id> \
--parameters systemNodeSubnetId=<system node subnet resource id> \
--parameters uamiPrincipalId=<user assigned identity prinicipal id>
Menyambungkan ke kluster
Ketika kluster AKS Otomatis dibuat sebagai kluster privat, titik akhir server API tidak memiliki alamat IP publik. Untuk mengelola server API, misalnya melalui kubectl, Anda perlu terhubung melalui komputer yang memiliki akses ke jaringan virtual Azure kluster. Ada beberapa opsi untuk membangun konektivitas jaringan ke kluster privat:
- Buat mesin virtual di jaringan virtual yang sama dengan kluster Otomatis AKS menggunakan
az vm createdengan parameter--vnet-name. - Gunakan komputer virtual di jaringan virtual terpisah dan siapkan peering jaringan virtual.
- Gunakan koneksi Express Route atau VPN.
- Gunakan koneksi titik akhir privat.
Membuat komputer virtual di jaringan virtual yang sama dengan kluster AKS adalah opsi term mudah. Rute Ekspres dan VPN menambahkan biaya dan memerlukan lebih banyak kompleksitas jaringan. Peering jaringan virtual mengharuskan Anda merencanakan rentang CIDR jaringan Anda untuk memastikan tidak ada rentang yang tumpang tindih. Untuk informasi selengkapnya, lihat Opsi untuk menyambungkan ke kluster privat.
Untuk mengelola kluster Kube, gunakan klien baris perintah Kube, kubectl.
kubectl sudah diinstal jika Anda menggunakan Azure Cloud Shell. Untuk menginstal kubectl secara lokal, jalankan perintah az aks install-cli . Kluster Otomatis AKS dikonfigurasi dengan Microsoft Entra ID untuk kontrol akses berbasis peran (RBAC) Kubernetes .
Penting
Saat membuat kluster menggunakan Bicep, Anda perlu menetapkan salah satu peran bawaan seperti Azure Kubernetes Service RBAC Reader, Azure Kubernetes Service RBAC Writer, Azure Kubernetes Service RBAC Admin, atau Azure Kubernetes Service RBAC Cluster Admin kepada pengguna Anda, dilingkupkan ke kluster atau namespace tertentu, misalnya menggunakan az role assignment create --role "Azure Kubernetes Service RBAC Cluster Admin" --scope <AKS cluster resource id> --assignee user@contoso.com. Pastikan juga pengguna Anda memiliki peran bawaan Azure Kubernetes Service Cluster User untuk dapat menjalankan az aks get-credentials, lalu mendapatkan kubeconfig kluster AKS Anda menggunakan perintah az aks get-credentials.
Konfigurasikan kubectl untuk terhubung ke kluster Kubernetes menggunakan perintah az aks get-credentials. Perintah ini mengunduh kredensial dan mengonfigurasi CLI Kubernetes untuk menggunakannya.
az aks get-credentials --resource-group <resource-group> --name <cluster-name>
Verifikasi koneksi ke kluster menggunakan perintah kubectl get. Perintah ini menampilkan daftar node kluster.
kubectl get nodes
Contoh output berikut menunjukkan bagaimana Anda diminta untuk masuk.
To sign in, use a web browser to open the page https://microsoft.com/devicelogin and enter the code AAAAAAAAA to authenticate.
Setelah Anda masuk, output sampel berikut menunjukkan kumpulan simpul sistem terkelola. Pastikan status simpul siap.
NAME STATUS ROLES AGE VERSION
aks-hostedpool-16652789-vms1 Ready <none> 19m v1.34.7
aks-hostedpool-16652789-vms2 Ready <none> 19m v1.34.7
aks-hostedpool-16652789-vms3 Ready <none> 19m v1.34.7
aks-system-surge-zq4d2 Ready <none> 19m v1.34.7
Meninjau kode Terraform
Nota
Kode sampel untuk artikel ini terletak di repositori Azure Terraform GitHub. Anda dapat melihat file log yang berisi hasil test dari versi Terraform saat ini dan sebelumnya.
Buat direktori untuk menguji sampel kode Terraform dan atur sebagai direktori saat ini.
Buat file bernama
providers.tfdan masukkan kode berikut:terraform { required_version = ">= 1.0" required_providers { azurerm = { source = "hashicorp/azurerm" version = "~>5.0" } random = { source = "hashicorp/random" version = "~>3.0" } } } provider "azurerm" { features {} }Buat file bernama
main.tfdan tambahkan kode berikut:# Create a random name for the resource group using random_pet resource "random_pet" "rg_name" { prefix = var.resource_group_name_prefix } # Create a resource group using the generated random name resource "azurerm_resource_group" "rg" { location = var.resource_group_location name = random_pet.rg_name.id } # Create the custom virtual network that hosts the cluster resource "azurerm_virtual_network" "vnet" { name = var.virtual_network_name location = azurerm_resource_group.rg.location resource_group_name = azurerm_resource_group.rg.name address_space = var.virtual_network_address_space } # Create the subnet delegated to AKS for API Server VNet Integration resource "azurerm_subnet" "api_server" { name = "apiServerSubnet" resource_group_name = azurerm_resource_group.rg.name virtual_network_name = azurerm_virtual_network.vnet.name address_prefixes = var.api_server_subnet_address_prefixes delegation { name = "aks-delegation" service_delegation { name = "Microsoft.ContainerService/managedClusters" actions = ["Microsoft.Network/virtualNetworks/subnets/join/action"] } } } # Create the subnet that hosts the user node pools resource "azurerm_subnet" "user_nodes" { name = "userNodeSubnet" resource_group_name = azurerm_resource_group.rg.name virtual_network_name = azurerm_virtual_network.vnet.name address_prefixes = var.user_node_subnet_address_prefixes } # Create the subnet that hosts the managed system node pool resource "azurerm_subnet" "system_nodes" { name = "managedSystemNodeSubnet" resource_group_name = azurerm_resource_group.rg.name virtual_network_name = azurerm_virtual_network.vnet.name address_prefixes = var.system_node_subnet_address_prefixes lifecycle { # AKS adds its own managed cluster delegation to this subnet after the # cluster is created. ignore_changes = [delegation] } } # Create the user-assigned managed identity used by the cluster resource "azurerm_user_assigned_identity" "aks" { name = var.identity_name location = azurerm_resource_group.rg.location resource_group_name = azurerm_resource_group.rg.name } # Grant the cluster identity Network Contributor on the virtual network resource "azurerm_role_assignment" "network_contributor" { scope = azurerm_virtual_network.vnet.id role_definition_name = "Network Contributor" principal_id = azurerm_user_assigned_identity.aks.principal_id principal_type = "ServicePrincipal" } # Create a random name for the AKS Automatic cluster resource "random_pet" "cluster_name" { prefix = var.cluster_name_prefix } # Create the private AKS Automatic cluster in the custom virtual network resource "azurerm_kubernetes_automatic_cluster" "aks_automatic" { name = random_pet.cluster_name.id location = azurerm_resource_group.rg.location resource_group_name = azurerm_resource_group.rg.name identity { type = "UserAssigned" identity_ids = [azurerm_user_assigned_identity.aks.id] } api_server_access { subnet_id = azurerm_subnet.api_server.id } hosted_system { node_subnet_id = azurerm_subnet.user_nodes.id system_node_subnet_id = azurerm_subnet.system_nodes.id } # The private_cluster block gives the API server a private IP address in the # virtual network. Reaching it requires private connectivity and DNS # resolution of the private FQDN, which peering, a VPN, or ExpressRoute can # provide from outside this virtual network. private_cluster { public_fully_qualified_domain_name_enabled = var.public_fully_qualified_domain_name_enabled } depends_on = [azurerm_role_assignment.network_contributor] }Buat file bernama
variables.tfdan tambahkan kode berikut:variable "resource_group_location" { type = string default = "westus2" description = "Location of the resource group." } variable "resource_group_name_prefix" { type = string default = "rg" description = "Prefix of the resource group name that's combined with a random ID so name is unique in your Azure subscription." } variable "cluster_name_prefix" { type = string default = "aks-automatic" description = "Prefix of the AKS Automatic cluster name that's combined with a random ID so the name is unique in your Azure subscription." } variable "public_fully_qualified_domain_name_enabled" { type = bool default = false description = "Whether to provision a public FQDN for the private cluster." } variable "virtual_network_name" { type = string default = "aks-automatic-vnet" description = "Name of the custom virtual network that hosts the cluster." } variable "identity_name" { type = string default = "aks-automatic-identity" description = "Name of the user-assigned managed identity that the cluster uses." } variable "virtual_network_address_space" { type = list(string) default = ["172.19.0.0/16"] description = "Address space of the custom virtual network." } variable "api_server_subnet_address_prefixes" { type = list(string) default = ["172.19.0.0/28"] description = "Address prefixes of the subnet delegated to the cluster API server." } variable "user_node_subnet_address_prefixes" { type = list(string) default = ["172.19.1.0/24"] description = "Address prefixes of the subnet that hosts the user node pools." } variable "system_node_subnet_address_prefixes" { type = list(string) default = ["172.19.0.64/26"] description = "Address prefixes of the subnet that hosts the managed system node pool." }Buat file bernama
outputs.tfdan masukkan kode berikut:output "resource_group_name" { value = azurerm_resource_group.rg.name } output "cluster_name" { value = azurerm_kubernetes_automatic_cluster.aks_automatic.name } output "cluster_id" { value = azurerm_kubernetes_automatic_cluster.aks_automatic.id } output "node_resource_group_id" { value = azurerm_kubernetes_automatic_cluster.aks_automatic.node_resource_group_id } output "virtual_network_name" { value = azurerm_virtual_network.vnet.name } output "private_fully_qualified_domain_name" { value = azurerm_kubernetes_automatic_cluster.aks_automatic.private_fully_qualified_domain_name }
Menginisialisasi Terraform
Jalankan terraform init untuk menginisialisasi implementasi Terraform. Perintah ini mengunduh penyedia Azure yang diperlukan untuk mengelola sumber daya Azure Anda.
terraform init -upgrade
Buat rencana pelaksanaan Terraform
Jalankan terraform plan untuk membuat rencana pelaksanaan.
terraform plan -out main.tfplan
Terapkan rencana implementasi Terraform
Untuk menerapkan rencana eksekusi pada infrastruktur cloud Anda, jalankan terraform apply.
terraform apply main.tfplan
Membuat kluster Otomatis AKS membutuhkan waktu beberapa menit untuk diselesaikan.
Memverifikasi kluster
Dapatkan nama grup sumber daya Azure dan nama kluster.
resource_group_name=$(terraform output -raw resource_group_name) cluster_name=$(terraform output -raw cluster_name)Jalankan az aks show untuk menampilkan kluster dan mengonfirmasi bahwa kluster tersebut bersifat privat dan menggunakan SKU
Automatic.az aks show --resource-group $resource_group_name --name $cluster_name --query "{name:name, sku:sku, provisioningState:provisioningState, privateCluster:apiServerAccessProfile.enablePrivateCluster}"
Menyambungkan ke kluster
Server API kluster privat tidak memiliki alamat IP publik, sehingga Anda mengelolanya dari komputer yang memiliki akses jaringan ke jaringan virtual kluster. Anda memiliki beberapa opsi untuk membangun konektivitas tersebut:
- Buat komputer virtual di jaringan virtual yang sama dengan kluster.
- Gunakan komputer virtual di jaringan virtual terpisah dan siapkan peering jaringan virtual.
- Gunakan koneksi Azure ExpressRoute atau VPN.
Untuk informasi selengkapnya, lihat Opsi untuk menyambungkan ke kluster privat.
Dari komputer dengan konektivitas ke jaringan virtual, konfigurasikan kubectl untuk terhubung ke kluster Kubernetes Anda dengan menggunakan perintah az aks get-credentials . Kluster Otomatis AKS dikonfigurasi dengan Microsoft Entra ID untuk kontrol akses berbasis peran (RBAC) Kubernetes .
az aks get-credentials --resource-group $resource_group_name --name $cluster_name
Verifikasi koneksi ke kluster Anda dengan menggunakan perintah kubectl get .
kubectl get nodes
Menyebarkan aplikasi
Untuk menyebarkan aplikasi, Anda menggunakan file manifes untuk membuat semua objek yang diperlukan untuk menjalankan aplikasi AKS Store. File manifes Kubernetes menentukan keadaan kluster yang diinginkan, seperti image kontainer mana yang akan dijalankan. Manifes mencakup penyebaran dan layanan Kubernetes berikut:
- Simpan depan: Aplikasi web bagi pelanggan untuk melihat produk dan melakukan pemesanan.
- Layanan produk: Menampilkan informasi produk.
- Layanan pemesanan: Penempatan pesanan.
- Rabbit MQ: Antrean pesan untuk pesanan.
Nota
Kami tidak menyarankan untuk menjalankan kontainer stateful, seperti Rabbit MQ, tanpa penyimpanan persisten untuk produksi. Kontainer ini digunakan di sini untuk kesederhanaan, tetapi sebaiknya gunakan layanan terkelola, seperti Azure Cosmos DB atau Azure Service Bus.
Buat namespace
aks-store-demountuk menyebarkan sumber daya Kubernetes.kubectl create ns aks-store-demoSebarkan aplikasi menggunakan perintah kubectl apply ke dalam namespace
aks-store-demo. File YAML yang menentukan penyebaran berada di GitHub.kubectl apply -n aks-store-demo -f https://raw.githubusercontent.com/Azure-Samples/aks-store-demo/main/aks-store-ingress-quickstart.yamlContoh output berikut menunjukkan penyebaran dan layanan:
statefulset.apps/rabbitmq created configmap/rabbitmq-enabled-plugins created service/rabbitmq created deployment.apps/order-service created service/order-service created deployment.apps/product-service created service/product-service created deployment.apps/store-front created service/store-front created ingress/store-front created
Uji aplikasi
Ketika aplikasi berjalan, layanan Kubernetes mengekspos front end aplikasi ke internet. Diperlukan beberapa menit untuk menyelesaikan proses ini.
Periksa status pod yang telah dideploy menggunakan perintah kubectl get pods. Pastikan semua pod berada dalam keadaan
Runningsebelum melanjutkan. Jika ini adalah beban kerja pertama yang Anda deploy, mungkin memerlukan beberapa menit bagi penyediaan node otomatis untuk membuat pool node guna menjalankan pod.kubectl get pods -n aks-store-demoPeriksa alamat IP publik untuk aplikasi tampilan depan toko. Pantau kemajuan menggunakan perintah kubectl get service dengan argumen
--watch.kubectl get ingress store-front -n aks-store-demo --watchOutput ADDRESS untuk layanan
store-frontpada awalnya tampil kosong.NAME CLASS HOSTS ADDRESS PORTS AGE store-front webapprouting.kubernetes.azure.com * 80 12mSetelah ALAMAT berubah dari kosong ke alamat IP publik yang sebenarnya, gunakan
CTRL-Cuntuk menghentikankubectlproses tontonan.Contoh output berikut menunjukkan alamat IP publik yang valid yang ditetapkan ke layanan:
NAME CLASS HOSTS ADDRESS PORTS AGE store-front webapprouting.kubernetes.azure.com * 4.255.22.196 80 12mBuka browser web ke alamat IP eksternal ingress Anda untuk melihat aplikasi Azure Store beraksi.
Menghapus kluster
Jika Anda tidak berencana untuk melalui tutorial AKS, bersihkan sumber daya yang tidak perlu untuk menghindari biaya Azure. Jalankan perintah az group delete untuk menghapus grup sumber daya, layanan kontainer, dan semua sumber daya terkait.
az group delete --name <resource-group> --yes --no-wait
Nota
Kluster AKS dibuat dengan identitas terkelola yang ditetapkan pengguna. Jika Anda tidak memerlukan identitas tersebut lagi, Anda dapat menghapusnya secara manual.
Saat Anda tidak lagi memerlukan sumber daya yang dibuat melalui Terraform, jalankan terraform plan dan tentukan flag destroy.
terraform plan -destroy -out main.destroy.tfplan
Jalankan terraform apply untuk menerapkan rencana pelaksanaan.
terraform apply main.destroy.tfplan
Langkah berikutnya
Dalam panduan mulai cepat ini, Anda telah menyebarkan kluster Kubernetes privat dengan menggunakan AKS Otomatis di dalam jaringan virtual kustom dan kemudian menyebarkan aplikasi multi-kontainer sederhana untuk kluster tersebut. Aplikasi sampel ini hanya untuk tujuan demo dan tidak mewakili semua praktik terbaik untuk aplikasi Kubernetes. Untuk panduan tentang membuat solusi lengkap dengan AKS untuk produksi, lihat panduan solusi AKS.
Untuk mempelajari selengkapnya tentang AKS Otomatis, lanjutkan ke pengenalan.