AKS 시리즈.네트워크 코어 애플리케이션: Azure CNI 네트워크 및 Application Gateway

저번 보도에서 우리는 여러 개의 노드를 사용하는 방법을 보았지만 이 환경에서 HTTP 응용 프로그램의 루트 adion을 사용할 수 없기 때문에 현재 무조작 컨트롤러가 없다.이번 보도에서 우리는 Ingress 컨트롤러를 고찰할 것이다.

웹 응용 방화벽(WAF)


Azure에서 WAF라고 하면 Azure Application Gateway입니다.이번에는 다음과 같은 구성을 목표로 구축한다.

정보 출처: 웹 응용 방화벽(WAF)을 사용하여 비즈니스 보안 유지

Azure CNI 네트워크


지금까지 정해진 Kubenet 네트워크를 사용했지만 모범 사례 지침 Kubenet의 몇 가지 단점과 환경을 활용하려면 Azure CNI를 사용해야 한다는 지도가 제시되었다.또 이번에 사용한 애플리케이션 게이트웨이는 아주어 CNI를 전제로 한다.
Azure CNI를 사용하여 다음 작업을 수행할 수 있습니다.
  • Azure 가상 네트워크에서 노드 및 Pode에 IP 할당
  • Azure 가상 네트워크에 모두 존재하므로 다른 Azure 또는 주파수 리소스로 라우팅할 수 있음

  • 확실히 kubenet에서Pod는 집단 내에서 관리하는 IP 범위에서 주소를 받았으며 노드의 IP 범위와 다르다.AKS의 네트워크 개념Azure Kubernetes Service(AKS)에 적용되는 네트워크 개념에 대해 더 자세한 설명이 있습니다.

    가상 네트워크 크기


    Azure CNI를 사용하면 모든 IP 주소가 가상 네트워크에서 할당되기 때문에 충분한 양의 IP를 제공할 수 있는 서브넷이 필요합니다.계산 방법을 포함한 상세한 내용은 예약된 클러스터의 IP 주소 지정을 참조하십시오.

    Azure CNI를 사용한 클러스터 생성


    마지막으로 여러 노드 풀을 만들 때 다시 만들어진 클러스터로, 네트워크 환경을 Azure CNI로 바꾸기 위해 다시 만들어집니다.몇 가지 전제 작업이 더 필요하다.

    전제 조건


    1. 기존 myaks를 삭제합니다.ACR은 그냥 쓰니까 남는 거야.
    2. AKS 클러스터 구축을 위한 가상 네트워크를 만듭니다.사이즈는 필요에 따라 변경됩니다.
    az network vnet create -g netcoresample -n netcoresampleaksvnet --address-prefix 10.0.0.0/16 --subnet-name akssubnet --subnet-prefix 10.0.0.0/24
    
    3. 서비스 제공자의 제작.
    az ad sp create-for-rbac --skip-assignment
    
    4. 기존 ACR의 자원 이름을 가져옵니다.
    az acr show --resource-group netcoresample --name kenakamuacr --query "id" --output tsv  
    
    5. 만든 서비스 제공자에게 ACR에 대한 취소 권한을 부여합니다.
    az role assignment create --assignee <appId> --scope <acrId> --role acrpull
    
    6. 가상 네트워크 서브넷의 자원 이름을 가져옵니다.
    az network vnet subnet list -g netcoresample --vnet-name netcoresampleaksvnet --query "[0].id" --output tsv
    
    7. 창설된 서비스 제공자에게 가상 네트워크 서브넷의 네트워크 공동 창설자 권한을 부여한다.
    az role assignment create --assignee <appId> --scope <subnet-id> --role "network contributor"
    

    클러스터 생성


    1. azaks create 명령을 사용하여 클러스터를 만듭니다.apppId,password는 서비스 첫 페이지를 제작할 때 얻은 값을 이용한다.Azure CNI 및 다중 노드 풀을 사용합니다.각종 매개 변수의 상세한 내용은 확장 매개변수를 참조하시오.
    az aks create -g netcoresample \
    -n myaks -c 2 \
    --service-principal <appId> \
    --client-secret <password> \
    --vm-set-type VirtualMachineScaleSets \
    --load-balancer-sku standard \
    --network-plugin azure \
    --vnet-subnet-id <subnet-id> \
    --docker-bridge-address 172.17.0.1/16 \
    --dns-service-ip 10.1.0.10 \
    --service-cidr 10.1.0.0/24 \
    --generate-ssh-keys
    
    2. 제작이 완료되면 포털에서 네트워크 설정을 확인한다.

    3. 클러스터 구축이 완료되면 Azure CNI는 이와 유사하게 새 노드 풀을 추가합니다.
    az aks nodepool add -g netcoresample --cluster-name myaks --name nodepool2 -c 1 --node-vm-size Standard_DS1_v2
    
    4. AKS를 연결합니다.
    az aks get-credentials -g netcoresample -n myaks
    
    4. 노드 목록을 가져옵니다.이름 확인과 함께 IP도 확인합니다.
    >kubectl get nodes -o wide
    NAME                                STATUS   ROLES   AGE     VERSION    INTERNAL-IP   EXTERNAL-IP   OS-IMAGE             KERNEL-VERSION      CONTAINER-RUNTIME
    aks-nodepool1-23705949-vmss000000   Ready    agent   16m     v1.13.11   10.0.0.4      <none>        Ubuntu 16.04.6 LTS   4.15.0-1059-azure   docker://3.0.6
    aks-nodepool1-23705949-vmss000001   Ready    agent   16m     v1.13.11   10.0.0.35     <none>        Ubuntu 16.04.6 LTS   4.15.0-1059-azure   docker://3.0.6
    aks-nodepool2-23705949-vmss000000   Ready    agent   9m34s   v1.13.11   10.0.0.66     <none>        Ubuntu 16.04.6 LTS   4.15.0-1059-azure   docker://3.0.6
    
    5.kind=sql:NoSchedule을 SQL 구성용 노드로 사용합니다.
    kubectl taint node aks-nodepool2-23705949-vmss000000 kind=sql:NoSchedule
    
    6. 마찬가지로 응용 노드도 온라인으로 진행되었다.
    kubectl taint node aks-nodepool1-23705949-vmss000000 kind=app:NoSchedule
    kubectl taint node aks-nodepool1-23705949-vmss000001 kind=app:NoSchedule
    

    응용 프로그램 설계


    클러스터 제작이 완료되어 응용 프로그램을 디버깅합니다.
    1. 응용 프로그램 명령을 통해 디버깅을 실행한다.
    kubectl apply -f myapp.yaml
    
    2. PORD의 IP를 확인합니다.노드의 범위와 같다.의도된 노드에 배치된 것도 확인했다.
    >kubectl get pods -o wide
    NAME                                READY   STATUS    RESTARTS   AGE     IP          NODE                                NOMINATED NODE   READINESS GATES
    core3webapp-67b678b946-cthmp        1/1     Running   4          2m57s   10.0.0.15   aks-nodepool1-23705949-vmss000000   <none>           <none>
    core3webapp-67b678b946-rd6nc        1/1     Running   4          2m57s   10.0.0.61   aks-nodepool1-23705949-vmss000001   <none>           <none>
    mssql-deployment-6597f9f5b6-z8g9j   1/1     Running   0          2m58s   10.0.0.73   aks-nodepool2-23705949-vmss000000   <none>           <none>
    
    3. 서비스를 받고 브라우저를 통해 액세스합니다.동작을 확인하다.
    >kubectl get svc
    NAME               TYPE           CLUSTER-IP   EXTERNAL-IP     PORT(S)        AGE
    core3webapp        LoadBalancer   10.1.0.149   20.44.134.195   80:30889/TCP   3m28s
    kubernetes         ClusterIP      10.1.0.1     <none>          443/TCP        22m
    mssql-deployment   ClusterIP      10.1.0.148   <none>          1433/TCP       3m29s
    

    Application Gateway


    다음은 Application Gateway와 AKS의 구성을 살펴보겠습니다.현재 Application Gateway와 AKS를 사용하는 두 가지 방법Application Gateway Kubernetes Ingress이 최신 방법이다.이번에 어떤 변화가 생겼는지 이해하기 위해 먼저 낡은 방법으로 구성한 다음 새로운 방법을 시도해 보자.

    Application Gateway 설치


    1. 가상 네트워크에 Application Gateway가 설치된 서브넷을 만듭니다.
    az network vnet subnet create -g netcoresample --vnet-name netcoresampleaksvnet --name appgatewaysubnet --address-prefixes 10.0.1.0/24
    
    2. 공용 IP 생성
    az network public-ip create -g netcoresample -n netcoresampleagPublicIP --allocation-method Static --sku Standard
    
    3. Application Gateway 제작.15~30분 정도 걸리니까 커피 한 잔 마시고 기다리세요.
    az network application-gateway create \
    -g netcoresample \
    -n netcoresampleag \
    --capacity 1 \
    --sku Standard_v2 \
    --vnet-name netcoresampleaksvnet \
    --subnet appgatewaysubnet \
    --public-ip-address netcoresampleagPublicIP\
     --location japaneast
    
    4. 제작이 완료되면 Azure 포털로 확인한다.

    AKS 구성 및 Application Gateway 구성


    이제 AKS 서비스는 외부에서 직접 액세스할 수 있으므로 Application Gateway에서만 액세스할 수 있도록 변경되었습니다.
    1. myapp.yaml의 마지막 서비스 정의를 바꾸어 내부 부하 균형기를 구성합니다.
    myapp.yaml
    <省略>
    ---
    apiVersion: v1
    kind: Service
    metadata:
      name: core3webapp
      labels:
        app: core3webapp
      annotations:
        service.beta.kubernetes.io/azure-load-balancer-internal: "true"
    spec:
      type: "LoadBalancer"
      ports:
      - protocol: TCP
        port: 80
      selector:
        app: core3webapp
    
    2. 설계를 수정한다.
    kubectl apply -f myapp.yml
    
    3. 서비스에서 EXTERNAL-IP가 가상 네트워크의 주소임을 확인합니다.
    >kubectl get svc
    NAME               TYPE           CLUSTER-IP   EXTERNAL-IP   PORT(S)        AGE
    core3webapp        LoadBalancer   10.1.0.149   10.0.0.97     80:30889/TCP   8h
    kubernetes         ClusterIP      10.1.0.1     <none>        443/TCP        8h
    mssql-deployment   ClusterIP      10.1.0.148   <none>        1433/TCP       8h
    
    4. Azure 포털에서 Application Gateway를 열고 백엔드 수영장을 선택한다.

    5. 기존 appGateway BackendPool을 선택하여 EXTERNAL-IP의 값을 목표로 설정합니다.저장 을 클릭합니다.

    6. 프런트엔드 IP 구조를 통해 공용 IP를 확인합니다.

    7. 브라우저를 통해 동작을 확인합니다.

    총결산


    애초 그려진 구성이지만 이 구성의 과제는 AKS 측 정보를 Application Gateway가 파악하지 못하는 것이다.정상성 탐색을 사용하여 정기적으로 프로그램의 사활을 감시할 수 있지만 AKS 측은 변경 사항을 동적으로 업데이트할 수 없습니다.
    이것을 실현하는 방법Application Gateway Kubernetes Ingress이 있기 때문에 다음에 이쪽을 구성해 보세요.
    다음 글로 이동
    디렉토리로 돌아가기

    인용하다


    Application Gateway
    Azure Kubernetes 서비스(AKS)는 Azure CNI 네트워크를 구성합니다.
    Azure Kubernetes Service(AKS)에 적용되는 네트워크 개념
    Azure Kubernetes Service(AKS)에서 내부 로드 밸런서 사용
    Application Gateway Kubernetes Ingress

    좋은 웹페이지 즐겨찾기