HTTP 프록시 사용

이 문서에서는 HTTP/HTTPS 프록시를 통해 AWS용 GKE에서 트래픽을 라우팅하는 방법을 보여줍니다. 클러스터를 만들 때 프록시 구성을 지정합니다.

개요

다음과 같은 이유로 AWS용 GKE는 프록시를 통해 아웃바운드 인터넷 트래픽을 라우팅할 수 있습니다.

  • Connect를 통해 Google Cloud에 클러스터 등록
  • Connect Agent 실행
  • Container Registry에서 이미지 다운로드

제한사항

  • httpProxyhttpsProxy 필드는 https://로 시작하는 URL을 지원하지 않습니다. http://를 사용해야 합니다. 포트 443 요청에는 HTTPS가 사용됩니다.
  • httpProxy, httpsProxy, noProxy의 값을 설정해야 합니다.
  • 추가 도메인, IP, CIDR을 noProxy 필드에 추가해야 할 수 있습니다. VPC IP 범위를 추가하는 것이 좋습니다. Google Kubernetes Engine 버전 1.22부터 AWS용 GKE에서 포드 주소 CIDR 및 서비스 주소 CIDR을 자동으로 추가합니다.

기본 요건

이 섹션에서는 프록시를 사용하기 전에 적용해야 할 기본 요건을 설명합니다.

VPC 엔드포인트 사용 설정

프록시를 구성하기 전에 GKE on AWS 설치를 위해 VPC 엔드포인트를 만들어야 합니다.

VPC 엔드포인트를 사용하면 비공개 서브넷의 리소스가 공개 인터넷 액세스 없이 AWS 서비스에 액세스할 수 있습니다.

다음 표에는 엔드포인트 유형 및 엔드포인트에 대한 액세스 권한이 필요한 보안 그룹과 함께 AWS용 GKE에서 VPC 엔드포인트가 필요한 AWS 서비스가 나열되어 있습니다.

서비스 엔드포인트 유형 보안 그룹
자동 확장 인터페이스 제어 영역, 노드 풀
EC2 인터페이스 제어 영역, 노드 풀
EFS 인터페이스 제어 영역
부하 분산 인터페이스 제어 영역, 노드 풀
키 관리 서비스 인터페이스 제어 영역, 노드 풀
S3 게이트웨이 제어 영역, 노드 풀
Secrets Manager 인터페이스 제어 영역, 노드 풀
보안 토큰 서비스(STS) 인터페이스 제어 영역, 노드 풀

AWS VPC 콘솔에서 엔드포인트를 만들 수 있습니다. VPC 엔드포인트를 만들 때 설정한 옵션은 VPC 구성에 따라 다릅니다.

보안 그룹 정의

AWS용 GKE는 소프트웨어 구성요소를 다운로드하기 위해 프록시 서버에 연결할 수 있어야 합니다. 프록시 서버에 대한 아웃바운드 연결을 허용하는 AWS 보안 그룹을 만들거나 찾습니다. 보안 그룹은 제어 영역, 노드 풀 보안 그룹에서 프록시 주소 및 포트로의 아웃바운드 액세스를 허용해야 합니다. 이 보안 그룹(예: sg-12345678)의 ID를 저장합니다.

유형 프로토콜 발신 포트 수신 포트 주소
이그레스 TCP 프록시 포트: 프록시 포트: 프록시 보안 그룹

프록시 허용 목록

AWS용 GKE에서 Google Cloud 서비스에 연결하려면 프록시 서버에서 다음 도메인에 대한 트래픽을 허용해야 합니다.

.gcr.io
cloudresourcemanager.googleapis.com
container.googleapis.com
gkeconnect.googleapis.com
gkehub.googleapis.com
oauth2.googleapis.com
securetoken.googleapis.com
storage.googleapis.com
sts.googleapis.com
www.googleapis.com
servicecontrol.googleapis.com
logging.googleapis.com
monitoring.googleapis.com
opsconfigmonitoring.googleapis.com
GCP_LOCATION-gkemulticloud.googleapis.com

GCP_LOCATION을 GKE Enterprise 클러스터가 있는 Google Cloud 리전으로 바꿉니다. us-west1 또는 다른 지원되는 리전을 지정합니다.

AWS IAM 역할 업데이트

AWS용 GKE 클러스터가 AWS Secrets Manager에서 프록시 구성을 읽으려면 secretsmanager:GetSecretValue를 클러스터의 제어 영역 역할노드 풀 역할에 추가해야 합니다.

이 권한을 추가하려면 제어 영역과 노드 풀 정책에 추가하세요. 자세한 내용은 IAM 정책 수정을 참조하세요.

프록시 구성 파일 만들기

프록시 구성은 AWS Secrets Manager 보안 비밀에 JSON 문자열로 저장됩니다. 이 구성을 aws 명령줄 도구에 파일로 전달할 수 있습니다. 이 섹션에서는 해당 파일을 만드는 방법을 설명합니다.

다음 표에서는 이 파일의 콘텐츠를 설명합니다.

필드 설명 예시 필수
httpProxy 프록시 서버 URL입니다. 값에 호스트 이름/IP 주소가 포함되어야 하며 선택적으로 포트, 사용자 이름, 비밀번호를 포함할 수 있습니다. "http://user:password@10.184.37.42:80"
"10.184.37.42"
httpsProxy 암호화된 HTTPS 트래픽의 프록시 URL. httpsProxy가 빈 값이면 httpProxy URL이 사용됩니다. "http://10.101.16.31:80"
noProxy 프록시에서 제외할 쉼표로 구분된 URL 목록입니다. 각 값은 IP 주소, CIDR 범위, 도메인 이름 또는 별표 문자(*)일 수 있습니다. 선행 점으로 지정된 도메인(예: '.google.com')은 하위 도메인이 필요함을 나타냅니다. 단일 별표 *를 사용하면 모든 프록시 구성을 무시합니다. "1.2.3.4,10.0.0.0/16,example.com,.site.com"
  1. 구성 파일을 만들려면 httpProxy, noProxy, httpsProxy(선택사항) 키 값이 포함된 JSON 파일을 만듭니다.

    {
      "httpProxy": "AUTHENTICATION_URL",
      "httpsProxy": "AUTHENTICATION_URL",
      "noProxy": "NO_PROXY_ADDRESSES"
    }
    

    다음을 바꿉니다.

    • AUTHENTICATION_URL: 프록시 사용자 이름과 비밀번호가 포함된 인코딩 URL
    • NO_PROXY_ADDRESSES: CIDR 블록 및 URL에 대한 쉼표로 구분된 목록(예: 10.0.0.0/16,http://example.com)

    다음 섹션에서 사용할 파일을 저장합니다.

  2. aws 명령줄 도구를 사용하여 이 JSON 데이터가 포함된 보안 비밀을 AWS Secrets Manager의 보안 비밀로 만듭니다.

    aws secretsmanager create-secret \
    --name SECRET_NAME \
    --secret-string file://PROXY_CONFIGURATION_FILE
    

    다음을 바꿉니다.

    • SECRET_NAME: 새 보안 비밀
    • PROXY_CONFIGURATION_FILE: 프록시 구성 파일의 경로

    출력에는 보안 비밀의 Amazon 리소스 이름(ARN)과 콘텐츠가 포함됩니다. 이제 클러스터를 만들 때 이 보안 비밀을 참조할 수 있습니다.

프록시를 사용하는 클러스터 만들기

아웃바운드 연결에 HTTP 프록시를 사용하도록 AWS용 GKE를 구성하려면 다음 단계를 수행하세요.

클러스터 만들기의 단계에 따라 proxy-secret-arnproxy-secret-version-id 플래그를 전달합니다.

gcloud container aws clusters create CLUSTER_NAME \
  --proxy-secret-arn=PROXY_SECRET_ARN \
  --proxy-secret-version-id=PROXY_SECRET_VERSION \

다음을 바꿉니다.

  • CLUSTER_NAME: 클러스터 이름
  • PROXY_SECRET_ARN: 프록시 설정이 포함된 보안 비밀의 ARN입니다(예: arn:aws::secretsmanager:us-east-2:111122223333:secret:example/ExampleSecret-jiObOV).
  • PROXY_SECRET_VERSION: 보안 비밀의 버전 ID입니다(예: EXAMPLE1-90ab-cdef-fedc-ba987EXAMPLE).

프록시 구성 업데이트

클러스터 제어 영역 또는 노드 풀의 프록시 구성을 업데이트할 수 있습니다. 프록시 구성 ARN을 업데이트하려면 먼저 제어 영역 또는 노드 풀 AWS IAM 역할을 업데이트해야 합니다.

AWS IAM 역할 업데이트

프록시 구성이 저장된 ARN을 변경하려면 먼저 클러스터의 제어 영역 역할노드 풀 역할에 보안 비밀 ARN에 대한 읽기 액세스 권한이 있어야 합니다. secretsmanager:GetSecretValue 권한이 있는 IAM 문의 범위가 특정 리소스 ARN인 경우 프록시 구성을 업데이트하기 전에 해당 목록에 새 보안 비밀 ARN을 추가하세요.

클러스터 프록시 구성 업데이트

클러스터의 프록시 구성을 업데이트하려면 Google Cloud CLI를 사용합니다.

gcloud container aws clusters update  CLUSTER_NAME \
    --location GOOGLE_CLOUD_LOCATION \
    --proxy-secret-arn=PROXY_SECRET_ARN \
    --proxy-secret-version-id=PROXY_SECRET_VERSION

다음을 바꿉니다.

  • CLUSTER_NAME: 클러스터 이름
  • GOOGLE_CLOUD_LOCATION: 클러스터를 관리하는 지원되는 Google Cloud 리전입니다.
  • PROXY_SECRET_ARN: 프록시 설정이 포함된 보안 비밀의 ARN입니다.
  • PROXY_SECRET_VERSION: 보안 비밀의 버전 ID입니다(예: EXAMPLE1-90ab-cdef-fedc-ba987EXAMPLE).

노드 풀 프록시 구성 업데이트

노드 풀의 프록시 구성을 업데이트하려면 Google Cloud CLI를 사용하세요.

gcloud container aws node-pools update NODE_POOL_NAME
    --cluster CLUSTER_NAME \
    --location GOOGLE_CLOUD_LOCATION \
    --proxy-secret-arn=PROXY_SECRET_ARN \
    --proxy-secret-version-id=PROXY_SECRET_VERSION

다음을 바꿉니다.

  • NODE_POOL_NAME: 노드 풀 이름
  • CLUSTER_NAME: 클러스터 이름
  • GOOGLE_CLOUD_LOCATION: 클러스터를 관리하는 지원되는 Google Cloud 리전입니다.
  • PROXY_SECRET_ARN: 프록시 설정이 포함된 보안 비밀의 ARN입니다.
  • PROXY_SECRET_VERSION: 보안 비밀의 버전 ID입니다(예: EXAMPLE1-90ab-cdef-fedc-ba987EXAMPLE).

프록시 구성 삭제

클러스터 제어 영역 또는 노드 풀에서 프록시 구성을 삭제할 수 있습니다. 이러한 작업은 독립적입니다. 제어 영역에서 구성을 삭제해도 클러스터의 노드 풀에서 구성이 삭제되지 않습니다.

제어 영역 프록시 구성 삭제

클러스터 제어 영역의 프록시 구성을 삭제하려면 Google Cloud CLI를 사용하세요.

gcloud container aws clusters update  CLUSTER_NAME \
  --location GOOGLE_CLOUD_LOCATION \
  --clear-proxy-config

다음을 바꿉니다.

노드 풀 프록시 구성 삭제

노드 풀에서 프록시 구성을 삭제하려면 Google Cloud CLI를 사용하세요.

gcloud container aws node-pools update NODE_POOL_NAME
  --cluster CLUSTER_NAME \
  --location GOOGLE_CLOUD_LOCATION \
  --clear-proxy-config

다음을 바꿉니다.

  • NODE_POOL_NAME: 노드 풀 이름
  • CLUSTER_NAME: 클러스터 이름
  • GOOGLE_CLOUD_LOCATION: 클러스터를 관리하는 지원되는 Google Cloud 리전(예: us-west1)

다음 단계