다음을 통해 공유


새 Application Gateway 배포를 사용하여 AGIC 설치

이 문서의 지침에서는 기존 구성 요소가 없는 환경에 AGIC(Application Gateway 수신 컨트롤러)를 설치하려고 하는 것으로 가정합니다.

Kubernetes 수신 솔루션에 대한 컨테이너용 Application Gateway를 고려합니다. 자세한 내용은 빠른 시작: 컨테이너용 Application Gateway ALB 컨트롤러 배포를 참조 하세요.

필수 명령줄 도구 설치

이 문서의 모든 명령줄 작업에 Azure Cloud Shell을 사용하는 것이 좋습니다. Cloud Shell 시작 단추를 선택하여 Cloud Shell열 수 있습니다.

또는 해당 아이콘을 선택하여 Azure Portal에서 Cloud Shell을 엽니다.

포털의 Azure PowerShell 아이콘

Cloud Shell 인스턴스에는 이미 필요한 모든 도구가 있습니다. 다른 환경을 사용하도록 선택하는 경우 다음 명령줄 도구가 설치되어 있는지 확인합니다.

ID 만들기

다음 단계를 사용하여 Microsoft Entra 서비스 주체 개체를 만듭니다.

  1. Azure RBAC(역할 기반 액세스 제어) 역할을 포함하는 Active Directory 서비스 주체를 만듭니다.

    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 출력의 appId 값과 password 값을 기록합니다. 다음 단계에서 사용하게 됩니다.

  2. appId 이전 명령의 출력 값을 사용하여 새 서비스 주체를 id 가져옵니다.

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

    이 명령의 출력은 .입니다 objectId. 다음 단계에서 사용하므로 이 값을 기록합니다.

  3. ARM 템플릿(Azure Resource Manager 템플릿) 배포에서 사용할 매개 변수 파일을 만듭니다.

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

    Kubernetes RBAC 사용 클러스터를 배포하려면 .로 true설정합니다aksEnableRBAC.

구성 요소 배포

다음 절차에서는 이러한 구성 요소를 구독에 추가합니다.

구성 요소를 배포하려면 다음을 수행합니다.

  1. ARM 템플릿을 다운로드합니다.

    wget https://raw.githubusercontent.com/Azure/application-gateway-kubernetes-ingress/master/deploy/azuredeploy.json -O template.json
    
  2. Azure CLI를 사용하여 ARM 템플릿을 배포하고 필요에 따라 수정합니다. 배포에는 최대 5분이 소요될 수 있습니다.

    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. 배포가 완료되면 배포 출력을 다음 파일에 deployment-outputs.json다운로드합니다.

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

AGIC 설정

이전 섹션의 지침에 따라 새 AKS 클러스터 및 Application Gateway 배포를 만들고 구성했습니다. 이제 샘플 앱 및 수신 컨트롤러를 새 Kubernetes 인프라에 배포할 준비가 되었습니다.

Kubernetes 자격 증명 설정

다음 단계에서는 새 Kubernetes 클러스터에 연결하는 데 사용할 kubectl 명령을 설정해야 합니다. Cloud Shell에는 이미 kubectl이 설치되어 있습니다. (Azure CLI)를 사용하여 az Kubernetes에 대한 자격 증명을 가져옵니다.

새로 배포된 AKS 인스턴스에 대한 자격 증명을 가져옵니다. 다음 명령에 대한 자세한 내용은 kubectl에서 Kubernetes 권한 부여에 대한 Azure RBAC 사용을 참조 하세요.

# 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 Pod ID 설치

Microsoft Entra Pod ID는 Azure Resource Manager대한 토큰 기반 액세스를 제공합니다.

Microsoft Entra Pod ID는 Kubernetes 클러스터에 다음 구성 요소를 추가합니다.

클러스터에 Microsoft Entra Pod ID를 설치하려면 다음 명령 중 하나를 사용합니다.

  • Kubernetes RBAC 지원 AKS 클러스터:

    kubectl create -f https://raw.githubusercontent.com/Azure/aad-pod-identity/master/deploy/infra/deployment-rbac.yaml
    
  • Kubernetes RBAC 사용 안 함 AKS 클러스터:

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

Helm 리포지토리 추가

Helm은 Kubernetes 패키지 관리자입니다. 패키지를 설치 application-gateway-kubernetes-ingress 하는 데 사용합니다.

Cloud Shell을 사용하는 경우에는 Helm을 설치할 필요가 없습니다. Cloud Shell은 Helm 버전 3과 함께 제공됩니다. 다음 명령 중 하나를 실행하여 AGIC Helm 리포지토리를 추가합니다.

  • Kubernetes RBAC 지원 AKS 클러스터:

    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 사용 안 함 AKS 클러스터:

    helm init
    

수신 컨트롤러의 Helm 차트 설치

  1. deployment-outputs.json 앞에서 만든 파일을 사용하여 다음 변수를 만듭니다.

    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를 구성하는 다운로드 helm-config.yaml:

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

    또는 다음 YAML 파일을 복사합니다.

    # 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. 새로 다운로드한 helm-config.yaml 파일을 편집하고 다음에 대한 섹션을 appgw 작성합니다 armAuth.

    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
    

    참고 항목

    소버린 클라우드(예: Azure Government)에 배포하는 경우 구성 매개 변수를 appgw.environment 추가하고 적절한 값으로 설정해야 합니다.

    값은 다음과 같습니다.

    • verbosityLevel: AGIC 로깅 인프라의 세부 정보 표시 수준을 설정합니다. 가능한 값은 로깅 수준을 참조 하세요.
    • appgw.environment: 클라우드 환경을 설정합니다. 가능한 값: AZURECHINACLOUD, AZUREGERMANCLOUD, AZUREPUBLICCLOUDAZUREUSGOVERNMENTCLOUD.
    • appgw.subscriptionId: Application Gateway가 있는 Azure 구독 ID입니다. 예: aaaa0000-bb11-2222-33cc-444444dddddd
    • appgw.resourceGroup: Application Gateway 배포를 만든 Azure 리소스 그룹의 이름입니다. 예: app-gw-resource-group
    • appgw.name: Application Gateway 배포의 이름입니다. 예: applicationgatewayd0f0
    • appgw.shared: 기본값인 부울 플래그입니다.false true 공유 Application Gateway 배포필요한 경우 이를 설정합니다.
    • kubernetes.watchNamespace: AGIC에서 확인해야 하는 네임스페이스를 지정합니다. 네임스페이스 값은 단일 문자열 값 또는 네임스페이스의 쉼표로 구분된 목록일 수 있습니다.
    • armAuth.type: 될 수도 있습니다aadPodIdentity.servicePrincipal
    • armAuth.identityResourceID: Azure 관리 ID의 리소스 ID입니다.
    • armAuth.identityClientID: ID의 클라이언트 ID입니다.
    • armAuth.secretJSON: 서비스 주체를 비밀 유형(즉, 설정된 armAuth.type servicePrincipal경우)으로 선택하는 경우에만 필요합니다.

    참고 항목

    구성 요소를 배포하기 위한 이전 단계에서 값과 identityClientID 값을 만들었습니다identityResourceID. 다음 명령을 사용하여 다시 가져올 수 있습니다.

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

    명령 <resource-group> 에서 Application Gateway 배포의 리소스 그룹입니다. <identity-name> 자리 표시자는 만든 ID의 이름입니다. 를 사용하여 az identity list특정 구독에 대한 모든 ID를 나열할 수 있습니다.

  4. AGIC 패키지를 설치합니다.

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

샘플 앱 설치

이제 Application Gateway, AKS 및 AGIC가 설치되었으므로 Azure Cloud Shell을 통해 샘플 앱을 설치할 수 있습니다.

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

또는 다음을 수행할 수 있습니다.

  • 이전 YAML 파일을 다운로드합니다.

    curl https://raw.githubusercontent.com/Azure/application-gateway-kubernetes-ingress/master/docs/examples/aspnetapp.yaml -o aspnetapp.yaml
    
  • YAML 파일을 적용합니다.

    kubectl apply -f aspnetapp.yaml
    
  • Application Gateway를 사용하여 HTTP 또는 HTTPS를 통해 AKS 서비스를 인터넷에 노출하는 방법에 대한 자세한 예제는 이 방법 가이드를 참조하세요.
  • 컨테이너용 Application Gateway에 대한 자세한 내용은 이 개요 문서를 참조 하세요.