AKS 프런트 엔드를 Front Door로 설정하여 IP 액세스 제어

이전 게시물에서 NGINX Ingress Controller를 만들고 IP 액세스 제어하는 ​​방법을 확인했습니다.

인터넷에서 직접 액세스하는 경우에는 이것으로 좋지만 프런트 엔드 포인트가 Load Balancer가 아니라,
  • Application Gateway
  • Front Door

  • 같은 레이어 7 로드 밸런서나 인터넷 트래픽을 제어하는 ​​구성 요소가 앞에 있는 경우 추가 설정이 필요합니다. 그 이유는 이것들이 HTTP 헤더를 재기록해 버려, 백엔드로 취득할 수 있는 소스 IP 주소는 이러한 전단에 있는 컴퍼넌트의 것이 되어, 요구를 송신한 클라이언트의 것이 아니게 되기 때문입니다.

    Front Door 측 설정



    우선, Front Door와 AKS를 접속하기 위해서는 다음의 설정을 실시합니다. AKS의 엔드포인트는 Load Balancer이므로 이를 지정합니다.
  • 백엔드 추가에서 호스트 유형에 대해 "공용 IP 주소"를 선택합니다.
  • 호스트 이름에 해당 IP 주소의 자원을 선택하십시오.

  • 이 시점에서 Ingress Controller에서 액세스를 제어하지 않는 경우에는 Front Door URL에서 일반 애플리케이션에 액세스할 수 있습니다. 하지만 이전 app1은 액세스 제어하고 있기 때문에 Front Door를 통해 액세스하면 화이트리스트의 IP 주소와 다르므로 다음과 같이 NGINX가 오류를 반환합니다.



    NGINX Ingress Controller 설정



    Front Door가 다시 작성하기 전에 액세스 소스 IP 주소는 X-Forwarded-For 헤더에 저장되므로 이 값을 가져오도록 Ingress Controller를 구성해야 합니다. NGINX Ingress Controller의 경우 ConfigMap에서 설정을 추가합니다.

    대략적인 절차는 아래와 같습니다.
  • Ingress Controller 리소스가 사용하는 ConfigMap을 확인합니다.
  • ConfigMap에 환경 변수를 추가합니다.

  • Helm에서 NGINX Ingress Controller를 배포하면 실제로 가져올 ConfigMap도 지정되지만 ConfigMap 자체는 생성되지 않습니다. 따라서 지정된 이름으로 직접 ConfigMap을 만듭니다.

    ConfigMap 지정 확인



    Ingress Controller 리소스를 검토하고 describe합니다.
    kubectl -n ingress-basic get deployments.apps
    
    NAME                                     READY   UP-TO-DATE   AVAILABLE   AGE
    nginx-ingress-ingress-nginx-controller   1/1     1            1           4d5h
    
    kubectl -n ingress-basic describe deployments.apps nginx-ingress-ingress-nginx-controller
    
    (中略)
      Containers:
       controller:
    (中略)
        Args:
          /nginx-ingress-controller
    (中略)
          --ingress-class=nginx
          --configmap=$(POD_NAMESPACE)/nginx-ingress-ingress-nginx-controller
    

    하단의 --configmap= 부분은 ConfigMap의 지정입니다.

    ConfigMap 만들기



    확인한 name 및 namespace에서 ConfigMap을 만듭니다. 이 때 X-Forwarded-For를 사용하기 위해 use-forwarded-headers 환경 변수를 설정합니다.
    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: nginx-ingress-ingress-nginx-controller #前述のdescribe結果から指定
      namespace: ingress-basic #前述のdescribe結果から指定
    data:
      use-forwarded-headers: "true" #Forwardedヘッダーを使用する設定
    

    배포합니다.
    kubectl apply -f configmap.yaml
    

    이제 Ingress Controller가 원래 소스 IP 주소를 볼 수 있습니다.

    동작 확인



    다시 Front Door를 통해 app1에 화이트리스트 IP 주소에서 액세스합니다.



    안전하게 액세스할 수 있습니다!

    좋은 웹페이지 즐겨찾기