Cloud Run for Anthos on Google Cloud의 모든 아웃바운드 네트워크 액세스 사용 설정

기본적으로 Google API에 대한 액세스를 비롯하여 클러스터의 모든 아웃바운드 트래픽이 차단됩니다. 예를 들어 Cloud Storage나 외부 API와 같은 Google Cloud 서비스에 연결하는 등 모든 아웃바운드 네트워크 액세스를 사용 설정하려면 config-network 맵을 수정하여 프록시 IP 범위의 올바른 범위를 설정해야 합니다.

기본 요건

이 페이지에서는 설정 안내에 따라 gcloud 및 kubectl 명령줄 도구를 설정했다고 가정합니다.

모든 아웃바운드 네트워크 액세스 사용 설정

다음 안내는 클러스터 버전 1.12.7-gke.17 이전(1.12 기반 클러스터) 또는 1.11.9-gke.13 이전(1.11 기반 클러스터)의 클러스터 버전에 적용됩니다. 이전 클러스터 버전에서는 인터넷의 모든 IP 주소에서 아웃바운드 트래픽을 허용하도록 설정해야 합니다. 이렇게 하면 애플리케이션이 잠재적으로 신뢰할 수 없는 엔드포인트에 연결됩니다.

클러스터의 IP 범위 결정

올바른 범위를 설정하려면 클러스터의 현재 IP 범위를 결정해야 합니다. 범위는 클러스터 구성에 따라 다릅니다.

  1. 명령어를 호출하여 범위를 결정합니다.

    gcloud container clusters describe [CLUSTER_NAME] \
    | grep -e clusterIpv4Cidr -e servicesIpv4Cidr

    [CLUSTER_NAME]을 클러스터 이름으로 바꿉니다. gcloud의 기본 클러스터로 설정했더라도 클러스터 이름을 제공해야 합니다. 또한 기본 요건 섹션에 설명된 대로 기본 영역을 설정하지 않은 경우에도 클러스터 이름 --zone=[ZONE] 뒤에 zone 매개변수를 추가해야 합니다. 여기서 [ZONE]을 클러스터 영역으로 바꿉니다.

  2. 위의 명령어로 표시되는 IP 범위는 다음과 비슷합니다.

    ...
    clusterIpv4Cidr: 10.8.0.0/14
    servicesIpv4Cidr: 10.11.240.0/20
    ...
    

    다음 섹션에 설명된 대로 모든 아웃바운드 액세스를 사용 설정하려면 이러한 IP 범위를 함께 추가해야 합니다.

IP 범위 설정

config-network ConfigMap의 istio.sidecar.includeOutboundIPRanges 매개변수는 Istio 사이드카가 가로채는 IP 범위를 지정합니다. 아웃바운드 액세스를 허용하려면 기본 매개변수 값을 이전 단계에서 얻은 클러스터의 IP 범위로 바꿉니다.

  1. 다음 명령어를 실행하여 config-network 맵을 수정합니다.

    kubectl edit configmap config-network --namespace knative-serving
  2. 원하는 편집기를 사용하여 istio.sidecar.includeOutboundIPRanges 매개변수 값을 * 에서 이전 단계에서 얻은 IP 범위로 변경합니다. 여러 IP 항목은 쉼표로 구분하세요. 예를 들면 다음과 같습니다.

  # Please edit the object below. Lines beginning with a '#' will be ignored,
  # and an empty file will abort the edit. If an error occurs while saving this file will be
  # reopened with the relevant failures.
  #
  apiVersion: v1
  data:
    istio.sidecar.includeOutboundIPRanges: '10.16.0.0/14,10.19.240.0/20'
  kind: ConfigMap
  metadata:
  ...

매개변수를 유효한 IP 주소 범위 집합으로 설정하면 Istio는 더 이상 지정된 범위를 벗어난 IP 주소로 이동하는 트래픽을 가로채지 않으므로 이그레스 규칙을 지정할 필요가 없습니다.

istio.sidecar.includeOutboundIPRanges 매개변수를 생략하거나 ''로 설정하면 Istio 배포 시간에 제공된 global.proxy.includeIPRanges 매개변수 값이 사용됩니다. 이 값은 *입니다.

잘못된 값을 사용하면 ''가 대신 사용됩니다.

  1. 변경사항을 저장합니다. 변경사항은 자동으로 감지되며 배포된 모든 버전에 사용됩니다.

아웃바운드 네트워킹 문제해결

클러스터 외부에서 호출하는 데 문제가 발생하면 pod의 메타데이터를 확인하여 정책이 서비스를 실행하는 포드에 적용되었는지 확인합니다. traffic.sidecar.istio.io/includeOutboundIPRanges 주석이 config-map의 예상 값과 일치하는지 확인합니다.

  1. pod는 0으로 조정될 수 있으므로 pod가 실행 중인지 확인합니다.

    curl -H "Host: helloworld-go.default.example.com" http://35.203.155. 229

    호스트 URL 및 IP 주소를 자체 URL 및 클러스터의 IP 주소로 바꿉니다. 클러스터 IP 주소를 찾는 방법을 모르는 경우 배포된 서비스 액세스의 안내를 참조하세요.

  2. 5분 내에 다음 명령어를 호출하여 사용 가능한 pod 목록을 가져옵니다.

    kubectl get pods
  3. get pods 명령어의 출력에서 서비스와 연결된 pod를 찾습니다. pod는 서비스 이름으로 시작합니다.

  4. 다음 명령어에 이 pod 이름을 사용하여 메타데이터를 검색하고 적용된 라벨을 확인합니다.

    kubectl get pod [POD_NAME] --output yaml

    [POD_NAME]을 pod 이름으로 바꿉니다. pod에 대한 자세한 내용은 pod 문서를 참조하세요.

    다음과 비슷한 결과가 표시됩니다.

  apiVersion: v1
  kind: Pod
  metadata:
    annotations:
      serving.knative.dev/configurationGeneration: "2"
      sidecar.istio.io/inject: "true"
      ...
      traffic.sidecar.istio.io/includeOutboundIPRanges: 10.16.0.0/14,10.19.240.0/20
  ...

traffic.sidecar.istio.io/includeOutboundIPRanges: 10.16.0.0/14,10.19.240.0/20으로 시작하는 줄에 가장 중요한 정보가 표시됩니다.