Yeni bir Application Gateway dağıtımı kullanarak AGIC'yi yükleme

Bu makaledeki yönergelerde Application Gateway Giriş Denetleyicisi'ni (AGIC) önceden var olan bileşenleri olmayan bir ortama yüklemek istediğiniz varsayılır.

İpucu

Kubernetes giriş çözümünüz için Konteynerler için Application Gateway'i göz önünde bulundurun. Daha fazla bilgi için bkz Hızlı Başlangıç Kılavuzu: Kapsayıcılar için Application Gateway ALB Denetleyicisini dağıtma.

Gerekli komut satırı araçlarını yükleme

Bu makaledeki tüm komut satırı işlemleri için Azure Cloud Shell kullanılmasını öneririz. Cloud Shell'i Başlat düğmesini seçerek Cloud Shell'i açabilirsiniz.

Alternatif olarak, Simgesini seçerek Azure portalından Cloud Shell'i açın.

Portalda Azure PowerShell simgesi

Cloud Shell örneğiniz zaten tüm gerekli araçlara sahiptir. Başka bir ortam kullanmayı seçerseniz aşağıdaki komut satırı araçlarının yüklendiğinden emin olun:

Kimlik oluşturma

Microsoft Entra hizmet sorumlusu nesnesi oluşturmak için aşağıdaki adımları kullanın.

  1. Azure rol tabanlı erişim denetimi (RBAC) rolünü içeren bir Active Directory hizmet sorumlusu oluşturun:

    az ad sp create-for-rbac --role Contributor --scopes /subscriptions/mySubscriptionID -o json > auth.json
    appId=$(jq -r ".appId" auth.json)
    password=$(jq -r ".password" auth.json)
    

    JSON çıkışından appId ve password değerlerini kaydedin. Bunları sonraki adımlarda kullanırsınız.

  2. Yeni hizmet sorumlusunun appId değerini almak için önceki komutun çıkışındaki id değeri kullanın:

    objectId=$(az ad sp show --id $appId --query "id" -o tsv)
    

    Bu komutun çıktısı şeklindedir objectId. Sonraki adımda kullanacağınız için bu değeri kaydedin.

  3. Azure Resource Manager şablonu (ARM şablonu) dağıtımında kullanacağınız parametre dosyasını oluşturun:

    cat <<EOF > parameters.json
    {
      "aksServicePrincipalAppId": { "value": "$appId" },
      "aksServicePrincipalClientSecret": { "value": "$password" },
      "aksServicePrincipalObjectId": { "value": "$objectId" },
      "aksEnableRBAC": { "value": false }
    }
    EOF
    

    RBAC özellikli bir Kubernetes kümesini dağıtmak için aksEnableRBAC öğesini true olarak ayarlayın.

Bileşenleri yerleştirme

Aşağıdaki yordam bu bileşenleri aboneliğinize ekler:

Bileşenleri dağıtmak için:

  1. ARM şablonunu indirin:

    wget https://raw.githubusercontent.com/Azure/application-gateway-kubernetes-ingress/master/deploy/azuredeploy.json -O template.json
    
  2. Azure CLI kullanarak ARM şablonunu dağıtın ve gerektiği gibi değiştirin. Dağıtım 5 dakika kadar sürebilir.

    resourceGroupName="MyResourceGroup"
    location="westus2"
    deploymentName="ingress-appgw"
    
    # create a resource group
    az group create -n $resourceGroupName -l $location
    
    # modify the template as needed
    az deployment group create \
            -g $resourceGroupName \
            -n $deploymentName \
            --template-file template.json \
            --parameters parameters.json
    
  3. Dağıtım tamamlandıktan sonra dağıtım çıkışını adlı deployment-outputs.jsonbir dosyaya indirin:

    az deployment group show -g $resourceGroupName -n $deploymentName --query "properties.outputs" -o json > deployment-outputs.json
    

AGIC'i ayarlama

Önceki bölümdeki yönergelerle yeni bir AKS kümesi ve Application Gateway dağıtımı oluşturup yapılandırmıştınız. Artık yeni Kubernetes altyapınıza örnek bir uygulama ve giriş denetleyicisi dağıtmaya hazırsınız.

Kubernetes kimlik bilgilerini ayarlama

Aşağıdaki adımlar için, yeni Kubernetes kümenize bağlanmak için kullanacağınız kubectl komutunu ayarlamanız gerekir. Cloud Shellkubectl zaten yüklü. Kubernetes kimlik bilgilerini almak için (Azure CLI) kullanacaksınız az .

Yeni dağıtılan AKS örneğinizin kimlik bilgilerini alın. Aşağıdaki komutlar hakkında daha fazla bilgi için bkz . Kubectl ile Kubernetes yetkilendirmesi için Azure RBAC kullanma.

# use the deployment-outputs.json file created after deployment to get the cluster name and resource group name
aksClusterName=$(jq -r ".aksClusterName.value" deployment-outputs.json)
resourceGroupName=$(jq -r ".resourceGroupName.value" deployment-outputs.json)

az aks get-credentials --resource-group $resourceGroupName --name $aksClusterName

Microsoft Entra İş Yükü Kimliğini Yükleme

Microsoft Entra İş Yükü Kimliği, Azure Resource Manager'a belirteç tabanlı erişim sağlar.

Microsoft Entra İş Yükü Kimliği, Kubernetes kümenize aşağıdaki bileşenleri ekler:

Microsoft Entra İş Yükü Kimliğini kümenize yüklemek için aşağıdaki komutlardan birini kullanın:

  • Kubernetes RBAC özellikli AKS kümesi:

    kubectl create -f https://raw.githubusercontent.com/Azure/aad-pod-identity/master/deploy/infra/deployment-rbac.yaml
    
  • Kubernetes RBAC tarafından devre dışı bırakılan AKS kümesi:

    kubectl create -f https://raw.githubusercontent.com/Azure/aad-pod-identity/master/deploy/infra/deployment.yaml
    

Helm deposunu ekleyin

Helm , Kubernetes için bir paket yöneticisidir. application-gateway-kubernetes-ingress paketini yüklemek için kullanırsınız.

Cloud Shell kullanıyorsanız Helm'i yüklemeniz gerekmez. Cloud Shell, Helm sürüm 3 ile birlikte gelir. AGIC Helm deposunu eklemek için aşağıdaki komutlardan birini çalıştırın:

  • Kubernetes RBAC özellikli AKS kümesi:

    kubectl create serviceaccount --namespace kube-system tiller-sa
    kubectl create clusterrolebinding tiller-cluster-rule --clusterrole=cluster-admin --serviceaccount=kube-system:tiller-sa
    helm init --tiller-namespace kube-system --service-account tiller-sa
    
  • Kubernetes RBAC tarafından devre dışı bırakılan AKS kümesi:

    helm init
    

Giriş denetleyicisinin Helm grafiğini yükleme

  1. deployment-outputs.json Aşağıdaki değişkenleri oluşturmak için daha önce oluşturduğunuz dosyayı kullanın:

    applicationGatewayName=$(jq -r ".applicationGatewayName.value" deployment-outputs.json)
    resourceGroupName=$(jq -r ".resourceGroupName.value" deployment-outputs.json)
    subscriptionId=$(jq -r ".subscriptionId.value" deployment-outputs.json)
    identityClientId=$(jq -r ".identityClientId.value" deployment-outputs.json)
    identityResourceId=$(jq -r ".identityResourceId.value" deployment-outputs.json)
    
  2. AGIC'yi yapılandıran uygulamasını indirin helm-config.yaml:

    wget https://raw.githubusercontent.com/Azure/application-gateway-kubernetes-ingress/master/docs/examples/sample-helm-config.yaml -O helm-config.yaml
    

    Veya aşağıdaki YAML dosyasını kopyalayın:

    # This file contains the essential configs for the ingress controller helm chart
    
    # Verbosity level of the App Gateway Ingress Controller
    verbosityLevel: 3
    
    ################################################################################
    # Specify which application gateway the ingress controller will manage
    #
    appgw:
        subscriptionId: <subscriptionId>
        resourceGroup: <resourceGroupName>
        name: <applicationGatewayName>
    
        # Setting appgw.shared to "true" will create an AzureIngressProhibitedTarget CRD.
        # This prohibits AGIC from applying config for any host/path.
        # Use "kubectl get AzureIngressProhibitedTargets" to view and change this.
        shared: false
    
    ################################################################################
    # Specify which kubernetes namespace the ingress controller will watch
    # Default value is "default"
    # Leaving this variable out or setting it to blank or empty string would
    # result in Ingress Controller observing all accessible namespaces.
    #
    # kubernetes:
    #   watchNamespace: <namespace>
    
    ################################################################################
    # Specify the authentication with Azure Resource Manager
    #
    # Two authentication methods are available:
    # - Option 1: AAD-Pod-Identity (https://github.com/Azure/aad-pod-identity)
    armAuth:
        type: aadPodIdentity
        identityResourceID: <identityResourceId>
        identityClientID:  <identityClientId>
    
    ## Alternatively you can use Service Principal credentials
    # armAuth:
    #    type: servicePrincipal
    #    secretJSON: <<Generate this value with: "az ad sp create-for-rbac --subscription <subscription-uuid> --role Contributor --sdk-auth | base64 -w0" >>
    
    ################################################################################
    # Specify if the cluster is Kubernetes RBAC enabled or not
    rbac:
        enabled: false # true/false
    
    # Specify aks cluster related information. THIS IS BEING DEPRECATED.
    aksClusterConfiguration:
        apiServerAddress: <aks-api-server-address>
    
  3. Yeni indirilen helm-config.yaml dosyasını düzenleyin ve appgw ve armAuth için bölümleri doldurun.

    sed -i "s|<subscriptionId>|${subscriptionId}|g" helm-config.yaml
    sed -i "s|<resourceGroupName>|${resourceGroupName}|g" helm-config.yaml
    sed -i "s|<applicationGatewayName>|${applicationGatewayName}|g" helm-config.yaml
    sed -i "s|<identityResourceId>|${identityResourceId}|g" helm-config.yaml
    sed -i "s|<identityClientId>|${identityClientId}|g" helm-config.yaml
    

    Not

    Bağımsız bir buluta dağıtıyorsanız (örneğin, Azure Kamu), yapılandırma parametresini appgw.environment eklemeniz ve uygun değere ayarlamanız gerekir.

    Değerler şunlardır:

    • verbosityLevel: AGIC günlük altyapısının detaylılık seviyesini ayarlar. Olası değerler için bkz Günlük düzeyleri.
    • appgw.environment: Bulut ortamını ayarlar. Olası değerler: AZURECHINACLOUD, AZUREGERMANCLOUD, AZUREPUBLICCLOUD, AZUREUSGOVERNMENTCLOUD.
    • appgw.subscriptionId: Application Gateway'in bulunduğu Azure abonelik kimliği. Örnek: aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e.
    • appgw.resourceGroup: Application Gateway dağıtımını oluşturduğunuz Azure kaynak grubunun adı. Örnek: app-gw-resource-group.
    • appgw.name: Application Gateway dağıtımının adı. Örnek: applicationgatewayd0f0.
    • appgw.shared: Varsayılan falseolarak olan Boole bayrağı. true eğer paylaşılan bir Application Gateway dağıtımına ihtiyacınız varsa.
    • kubernetes.watchNamespace: AGIC'in izlemesi gereken ad alanını belirtir. Ad alanı değeri tek bir dize değeri veya virgülle ayrılmış bir ad alanı listesi olabilir.
    • armAuth.type: veya aadPodIdentityolabilirservicePrincipal.
    • armAuth.identityResourceID: Azure yönetilen kimliğinin kaynak kimliği.
    • armAuth.identityClientID: İstemcinin kimlik numarası.
    • armAuth.secretJSON: Yalnızca, gizli türü olarak bir hizmet sorumlusu seçtiğinizde (yani armAuth.type'i servicePrincipal olarak ayarladığınızda) gereklidir.

    Not

    Önceki adımlar sırasında identityResourceID için identityClientID ve değerlerini oluşturdunuz. Aşağıdaki komutu kullanarak bunları yeniden edinebilirsiniz:

    az identity show -g <resource-group> -n <identity-name>
    

    Komutta, <resource-group> Uygulama Geçidi dağıtımınızın kaynak grubudur. <identity-name> yer tutucu, oluşturulan kimliğin adını belirtir. Belirli bir abonelik için tüm kimlikleri az identity list kullanarak listeleyebilirsiniz.

  4. AGIC paketini yükleyin:

    helm install agic-controller oci://mcr.microsoft.com/azure-application-gateway/charts/ingress-azure --version 1.8.1 -f helm-config.yaml
    

Örnek uygulama yükleme

Application Gateway, AKS ve AGIC yüklü olduğuna göre Azure Cloud Shell aracılığıyla örnek bir uygulama yükleyebilirsiniz:

cat <<EOF | kubectl apply -f -
apiVersion: v1
kind: Pod
metadata:
  name: aspnetapp
  labels:
    app: aspnetapp
spec:
  containers:
  - image: "mcr.microsoft.com/dotnet/samples:aspnetapp"
    name: aspnetapp-image
    ports:
    - containerPort: 8080
      protocol: TCP

---

apiVersion: v1
kind: Service
metadata:
  name: aspnetapp
spec:
  selector:
    app: aspnetapp
  ports:
  - protocol: TCP
    port: 80
    targetPort: 8080

---

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: aspnetapp
  annotations:
    kubernetes.io/ingress.class: azure/application-gateway
spec:
  rules:
  - http:
      paths:
      - path: /
        pathType: Exact
        backend:
          service:
            name: aspnetapp
            port:
              number: 80
        pathType: Exact
EOF

Alternatif olarak şunları da yapabilirsiniz:

  • Önceki YAML dosyasını indirin:

    curl https://raw.githubusercontent.com/Azure/application-gateway-kubernetes-ingress/master/docs/examples/aspnetapp.yaml -o aspnetapp.yaml
    
  • YAML dosyasını uygulayın:

    kubectl apply -f aspnetapp.yaml
    
  • Application Gateway kullanarak AKS hizmetini HTTP veya HTTPS aracılığıyla İnternet'te kullanıma sunma hakkında daha fazla örnek için bu nasıl yapılır kılavuzuna bakın.
  • Kapsayıcılar için Application Gateway hakkında bilgi için bu genel bakış makalesine bakın.