새 Application Gateway 배포를 사용하여 AGIC 설치
이 문서의 지침에서는 기존 구성 요소가 없는 환경에 AGIC(Application Gateway 수신 컨트롤러)를 설치하려고 하는 것으로 가정합니다.
팁
Kubernetes 수신 솔루션에 대한 컨테이너용 Application Gateway를 고려합니다. 자세한 내용은 빠른 시작: 컨테이너용 Application Gateway ALB 컨트롤러 배포를 참조 하세요.
필수 명령줄 도구 설치
이 문서의 모든 명령줄 작업에 Azure Cloud Shell을 사용하는 것이 좋습니다. Cloud Shell 시작 단추를 선택하여 Cloud Shell을 열 수 있습니다.
또는 해당 아이콘을 선택하여 Azure Portal에서 Cloud Shell을 엽니다.
Cloud Shell 인스턴스에는 이미 필요한 모든 도구가 있습니다. 다른 환경을 사용하도록 선택하는 경우 다음 명령줄 도구가 설치되어 있는지 확인합니다.
az
: Azure CLI(설치 지침)kubectl
: Kubernetes 명령줄 도구(설치 지침)helm
: Kubernetes 패키지 관리자(설치 지침)jq
: 명령줄 JSON 프로세서(설치 지침)
ID 만들기
다음 단계를 사용하여 Microsoft Entra 서비스 주체 개체를 만듭니다.
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
값을 기록합니다. 다음 단계에서 사용하게 됩니다.appId
이전 명령의 출력 값을 사용하여 새 서비스 주체를id
가져옵니다.objectId=$(az ad sp show --id $appId --query "id" -o tsv)
이 명령의 출력은 .입니다
objectId
. 다음 단계에서 사용하므로 이 값을 기록합니다.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
.
구성 요소 배포
다음 절차에서는 이러한 구성 요소를 구독에 추가합니다.
- AKS(Azure Kubernetes Service)
- Azure 애플리케이션 Gateway v2
- 두 개의 서브넷이 있는 Azure Virtual Network
- 공용 IP 주소
- Microsoft Entra Pod ID에서 사용할 관리 ID입니다 .
구성 요소를 배포하려면 다음을 수행합니다.
ARM 템플릿을 다운로드합니다.
wget https://raw.githubusercontent.com/Azure/application-gateway-kubernetes-ingress/master/deploy/azuredeploy.json -O template.json
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
배포가 완료되면 배포 출력을 다음 파일에
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 클러스터에 다음 구성 요소를 추가합니다.
- Kubernetes CRD(사용자 지정 리소스 정의):
AzureIdentity
,AzureAssignedIdentity
AzureIdentityBinding
- MIC(Managed Identity Controller) 구성 요소
- NMI(Node Managed Identity) 구성 요소
클러스터에 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 차트 설치
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)
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>
새로 다운로드한
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
,AZUREPUBLICCLOUD
AZUREUSGOVERNMENTCLOUD
.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를 나열할 수 있습니다.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