AKS(Azure Kubernetes Service)의 HTTP 프록시 지원

이 문서에서는 아웃바운드 인터넷 액세스에 HTTP 프록시를 사용하도록 AKS(Azure Kubernetes Service) 클러스터를 구성하는 방법을 알아봅니다.

관리되는 가상 네트워크 또는 사용자 지정 가상 네트워크에 배포된 AKS 클러스터에는 제대로 작동하는 데 필요한 특정 아웃바운드 종속성이 있으므로 HTTP 프록시를 통해 인터넷 액세스를 라우팅해야 하는 환경에서 문제가 발생했습니다. 노드는 인터넷 서비스에 액세스하는 데 필요한 구성, 환경 변수 및 인증서를 부트스트랩할 방법이 없었습니다.

HTTP 프록시 기능은 AKS 클러스터에 HTTP 프록시 지원을 추가하여 프록시 종속 환경에서 AKS 필수 네트워크 트래픽을 보호하는 데 사용할 수 있는 간단한 인터페이스를 노출합니다. 이 기능을 사용하면 AKS 노드와 Pod가 모두 HTTP 프록시를 사용하도록 구성됩니다. 또한 이 기능을 사용하면 클러스터 부트스트랩의 일부로 신뢰할 수 있는 인증 기관을 노드에 설치할 수 있습니다. 보다 복잡한 솔루션에서는 네트워크 전반에 걸쳐 보안 통신을 설정하기 위해 신뢰 체인을 만들어야 할 수도 있습니다.

제한 사항 및 고려 사항

다음 시나리오는 지원되지 않습니다.

  • 노드 풀당 다른 프록시 구성
  • 사용자/암호 인증
  • API 서버 통신을 위한 사용자 지정 CA(인증 기관)
  • Windows 기반 클러스터
  • VMAS(가상 머신 가용성 집합)를 사용하는 노드 풀
  • noProxy의 도메인 접미사에 연결된 와일드카드로 * 사용

httpProxy, httpsProxytrustedCa에는 기본적으로 값이 없습니다. Pod에는 다음 환경 변수가 삽입됩니다.

  • HTTP_PROXY
  • http_proxy
  • HTTPS_PROXY
  • https_proxy
  • NO_PROXY
  • no_proxy

프록시 환경 변수 주입을 사용하지 않도록 설정하려면 Pod에 "kubernetes.azure.com/no-http-proxy-vars":"true" 주석을 달아야 합니다.

시작하기 전에

  • 최신 버전의 Azure CLI가 필요합니다. az --version을 실행하여 버전을 찾고 az upgrade를 실행하여 버전을 업그레이드합니다. 설치 또는 업그레이드해야 하는 경우 Azure CLI 설치를 참조하세요.
  • 사용 가능한 AKS 클러스터 업그레이드가 있는지 확인하여 최신 버전의 AKS를 실행하고 있는지 확인합니다. 업그레이드해야 하는 경우 AKS 클러스터 업그레이드를 참조하세요.
  • 프록시 구성 업데이트에 필요한 OS 파일은 노드 이미지 업그레이드 프로세스 중에만 업데이트할 수 있습니다. 프록시를 구성한 후 변경 내용을 적용하려면 노드 이미지를 업그레이드해야 합니다. 자세한 내용은 AKS 노드 이미지 업그레이드를 참조하세요.

Azure CLI를 사용하여 HTTP 프록시 구성

az aks create 명령을 사용하고 구성을 JSON 파일로 전달하는 클러스터 만드는 동안 HTTP 프록시로 AKS 클러스터를 구성할 수 있습니다.

구성 파일의 스키마는 다음과 같습니다.

{
  "httpProxy": "string",
  "httpsProxy": "string",
  "noProxy": [
    "string"
  ],
  "trustedCa": "string"
}
  • httpProxy: 클러스터 외부에서 HTTP 연결을 만드는 데 사용할 프록시 URL입니다. URL 체계는 http이어야 합니다.
  • httpsProxy: 클러스터 외부에서 HTTPS 연결을 만드는 데 사용할 프록시 URL입니다. 지정하지 않으면 HTTP 및 HTTPS 연결 모두에 httpProxy가 사용됩니다.
  • noProxy: 프록시를 제외할 대상 도메인 이름, 도메인, IP 주소 또는 기타 네트워크 CIDR 목록입니다.
  • trustedCa: base64 encoded 대체 CA 인증서 콘텐츠를 포함하는 문자열입니다. 현재 PEM 형식만 지원됩니다.

Important

Kubernetes 시스템의 일부인 Go 기반 구성 요소와의 호환성을 위해 인증서는 사용되지 않는 일반 이름 인증서 대신 Subject Alternative Names(SANs)지원해야 합니다.

환경 변수 http_proxy, https_proxyno_proxy를 준수하는 방법에는 애플리케이션마다 차이가 있습니다. Curl과 Python은 no_proxy에서 CIDR을 지원하지 않지만 Ruby는 지원합니다.

예제 입력:

참고 항목

CA 인증서는 PEM 형식 인증서 콘텐츠의 base64 인코딩 문자열이어야 합니다.

{
  "httpProxy": "http://myproxy.server.com:8080/", 
  "httpsProxy": "https://myproxy.server.com:8080/", 
  "noProxy": [
    "localhost",
    "127.0.0.1"
  ],
  "trustedCA": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUgvVENDQmVXZ0F3SUJB...b3Rpbk15RGszaWFyCkYxMFlscWNPbWVYMXVGbUtiZGkvWG9yR2xrQ29NRjNURHg4cm1wOURCaUIvCi0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0="
}

파일을 작성하고 httpProxy, httpsProxynoProxy에 대한 값을 입력합니다. 환경에 필요한 경우 trustedCa에 대한 값을 입력합니다. 다음으로, 만든 파일에 설정된 --http-proxy-config 매개 변수와 함께 az aks create 명령을 사용하여 클러스터를 배포할 수 있습니다. 클러스터는 노드에 구성된 HTTP 프록시로 초기화되어야 합니다.

az aks create --name $clusterName --resource-group $resourceGroup --http-proxy-config aks-proxy-config.json

ARM(Azure Resource Manager) 템플릿을 사용하여 HTTP 프록시 구성

ARM 템플릿을 사용하여 HTTP 프록시로 AKS 클러스터를 배포할 수 있습니다. 다음 예에 표시된 것처럼 CLI 배포에 사용되는 동일한 스키마가 "properties" 아래의 Microsoft.ContainerService/managedClusters 정의에 존재합니다.

"properties": {
    ...,
    "httpProxyConfig": {
        "httpProxy": "string",
        "httpsProxy": "string",
        "noProxy": [
            "string"
        ],
        "trustedCa": "string"
    }
}

템플릿에서 httpProxy, httpsProxynoProxy에 대한 값을 입력합니다. 필요한 경우 trustedCa에 대한 값을 입력합니다. 다음으로 템플릿을 배포할 수 있습니다. 클러스터는 노드에 구성된 HTTP 프록시로 초기화되어야 합니다.

프록시 구성 업데이트

참고 항목

새 프록시로 전환하는 경우 업데이트가 성공하려면 새 프록시가 이미 존재해야 합니다. 업그레이드가 완료된 후 이전 프록시를 삭제할 수 있습니다.

필요한 경우 httpProxy, httpsProxy, noProxytrustedCa의 값이 업데이트된 새 JSON 파일로 설정된 --http-proxy-config 매개 변수와 함께 az aks update 명령을 사용하여 클러스터의 프록시 구성을 업데이트할 수 있습니다. 업데이트는 새 httpProxy, httpsProxy 또는 noProxy 값을 사용하여 새 환경 변수를 Pod에 삽입합니다. 환경 변수 값은 허용 웹후크 변형에 의해 삽입되므로 앱이 Pod를 선택하려면 Pod를 회전해야 합니다. containerd 및 노드 자체와 같은 Kubernetes 아래 구성 요소의 경우 노드 이미지 업그레이드가 수행될 때까지 적용되지 않습니다.

예를 들어, aks-proxy-config-2.json이라는 새 CA 인증서의 base64 인코딩 문자열을 사용하여 새 파일을 만들었다고 가정하겠습니다. 다음 명령을 사용하여 클러스터의 프록시 구성을 업데이트할 수 있습니다.

az aks update --name $clusterName --resource-group $resourceGroup --http-proxy-config aks-proxy-config-2.json

AKS 노드 이미지 업그레이드

프록시를 구성한 후 변경 내용을 적용하려면 노드 이미지를 업그레이드해야 합니다. 노드 이미지 업그레이드 프로세스는 프록시 구성 업데이트에 필요한 OS 파일을 업데이트하는 유일한 방법입니다. 노드 이미지 업그레이드 프로세스는 노드 풀의 각 노드에서 OS 이미지를 업데이트하는 롤링 업그레이드입니다. AKS 컨트롤 플레인은 실행 중인 애플리케이션을 중단하지 않고 업그레이드 프로세스를 처리합니다.

AKS 노드 이미지를 업그레이드하려면 AKS(Azure Kubernetes Service) 노드 이미지 업그레이드를 참조하세요.

추가 기능 구성 모니터링

모니터링 추가 기능이 있는 HTTP 프록시는 다음 구성을 지원합니다.

  • 인증이 없는 아웃바운드 프록시
  • 사용자 이름 및 암호 인증을 사용한 아웃바운드 프록시
  • Log Analytics 엔드포인트에 대해 신뢰할 수 있는 인증서가 있는 아웃바운드 프록시

다음 구성은 지원되지 않습니다.

  • 신뢰할 수 있는 인증서가 있는 프록시를 사용할 때 사용자 지정 메트릭 및 권장 경고 기능

다음 단계

AKS 클러스터의 네트워크 요구 사항에 대한 자세한 내용은 AKS의 클러스터 노드에 대한 송신 트래픽 제어를 참조하세요.