IP 매스커레이드 에이전트

이 페이지에서는 Google Kubernetes Engine의 IP 매스커레이드 에이전트가 어떻게 작동하는지 설명합니다.

개요

IP 매스커레이딩은 다대일 IP 주소 변환을 수행하는 데 사용되는 네트워크 주소 변환(NAT) 형식입니다. 매스커레이딩은 단일 주소 뒤에 여러 소스 IP 주소를 마스킹합니다.

클러스터에서 IP 매스커레이딩을 사용하면 개별 포드 IP 주소가 링크-로컬 범위(169.254.0.0/16)와 추가적인 임의 IP 범위 밖의 트래픽에 노출되지 않기 때문에 보안을 강화할 수 있습니다.

또한 IP 매스커레이딩을 사용하면 클러스터 CIDR 범위(10.0.0.0/8)의 네트워킹 리소스와 상호 작용하는 192.168.0.0/16 범위의 포드처럼 매스커레이드 없는 IP 범위 간 통신을 구성할 수 있습니다.

시작하기 전에

이 작업을 준비하려면 다음 단계를 수행하세요.

  • Google Kubernetes Engine API가 사용 설정되었는지 확인합니다.
  • Google Kubernetes Engine API 사용 설정
  • Cloud SDK가 설치되었는지 확인합니다.
  • 기본 프로젝트 ID를 설정합니다.
    gcloud config set project [PROJECT_ID]
  • 영역 클러스터를 사용하는 경우 기본 컴퓨팅 영역을 설정합니다.
    gcloud config set compute/zone [COMPUTE_ZONE]
  • 지역 클러스터를 사용하는 경우 기본 컴퓨팅 지역을 설정합니다.
    gcloud config set compute/region [COMPUTE_REGION]
  • gcloud를 최신 버전으로 업데이트합니다.
    gcloud components update

ip-masq-agent 작동 방식

GKE에서 IP 매스커레이딩은 ip-masq-agent 도구가 처리합니다. ip-masq-agent는 다음 추가 조건 중 하나 이상이 충족되면 GKE v1.7 이상에서 자동으로 사용 설정됩니다.

  • 클러스터에 네트워크 정책이 있습니다
  • 클러스터의 CIDR 범위가 10.0.0.0/8 내에 있지 않습니다.

클러스터가 GKE v1.7 이상을 사용하지만 ip-masq-agent가 자동으로 사용 설정되기 위한 다른 조건을 준수하지 않는 경우, 수동으로 ip-masq-agent 에이전트를 만들 수 있습니다.

ip-masq-agent는 노드와 클러스터의 IP 범위 밖의 대상으로 트래픽을 보낼 때 노드/포드 IP 주소 매스커레이드를 처리하도록 iptables 규칙을 구성합니다. 포드 IP 주소는 노드의 주소 뒤에 마스킹됩니다.

기본적으로 이 에이전트는 RFC 1918이 지정한 다음 3개의 비공개 IP 범위를 비-매스커레이드 CIDR로 취급하도록 구성되어 있습니다.

  • 포드 IP 주소에 사용되는 클러스터 CIDR인 10.0.0.0/8
  • 172.16.0.0/12
  • 192.168.0.0/16

기본적으로 IP 매스커레이딩은 링크-로컬 범위(169.254.0.0/16)를 비-매스커레이드 CIDR로 취급합니다.

기본적으로 이 에이전트는 60초마다 컨테이너에 있는 /etc/config/ip-masq-agent 파일에서 구성 파일을 다시 로드합니다.

다음은 ip-masq-agent가 적용하는 기본 iptables 규칙 집합입니다.

iptables -t nat -L IP-MASQ-AGENT
RETURN     all  --  anywhere             169.254.0.0/16       /* ip-masq-agent: cluster-local traffic should not be subject to MASQUERADE */ ADDRTYPE match dst-type !LOCAL
RETURN     all  --  anywhere             10.0.0.0/8           /* ip-masq-agent: cluster-local traffic should not be subject to MASQUERADE */ ADDRTYPE match dst-type !LOCAL
RETURN     all  --  anywhere             172.16.0.0/12        /* ip-masq-agent: cluster-local traffic should not be subject to MASQUERADE */ ADDRTYPE match dst-type !LOCAL
RETURN     all  --  anywhere             192.168.0.0/16       /* ip-masq-agent: cluster-local traffic should not be subject to MASQUERADE */ ADDRTYPE match dst-type !LOCAL
MASQUERADE  all  --  anywhere            anywhere             /* ip-masq-agent: outbound traffic should be subject to MASQUERADE (this match must come after cluster-local CIDR matches) */ ADDRTYPE match dst-type !LOCAL

ConfigMap을 사용하여 에이전트 구성

위에 나온 기본 규칙 집합이 클러스터에 충분하지 않은 경우, ConfigMap을 사용하여 영향을 받는 IP 범위를 직접 설정할 수 있습니다.

ConfigMap 파일은 YAML 또는 JSON으로 작성되어야 하며, 이름이 config여야 합니다.

파일에는 3개의 키가 포함될 수 있으며, 키는 모두 선택사항입니다.

  • nonMasqueradeCIDRs: IP 매스커레이딩을 사용하지 않는 IP 주소 범위를 지정하는 CIDR 표기법 문자열 목록입니다.
  • masqLinkLocal: 링크-로컬 프리픽스(169.254.0.0/16)로 가는 트래픽을 매스커레이드할지 여부를 나타내는 부울 값입니다. 기본값은 false입니다.
  • resyncInterval: 에이전트가 디스크에서 ConfigMap 파일 동기화를 시도하는 간격을 나타내는 정수 값입니다. 형식은 Nx인데, 여기서 N은 정수이고 xs 또는 ms 같은 시간 단위입니다.

예를 들어 다음 ConfigMap config10.0.0.0/8ip-masq-agent가 제외하는 것을 허용합니다.

nonMasqueradeCIDRs:
  - 10.0.0.0/8
resyncInterval: 60s

기본적으로 링크-로컬 범위(169.254.0.0/16)는 IP 매스커레이딩이 면제됩니다.

ip-masq-agent가 링크-로컬 범위에 IP 매스커레이딩을 사용 설정하도록 하려면 ConfigMap에서 masqLinkLocal 키의 값을 true로 설정하세요.

예를 들면 다음과 같습니다.

nonMasqueradeCIDRs:
  - 10.0.0.0/8
resyncInterval: 60s
masqLinkLocal: true

클러스터에 ConfigMap 추가

클러스터에 ConfigMap을 추가하려면 셸 또는 터미널 창에서 다음 명령어를 실행하세요.

kubectl create configmap [CONFIGMAP_NAME] \
--from-file config \
--namespace kube-system

각 항목의 의미는 다음과 같습니다.

  • [CONFIGMAP_NAME]ip-masq-agent와 같이 ConfigMap 리소스에 대해 선택하는 이름입니다.

예를 들면 다음과 같습니다.

kubectl create configmap ip-masq-agent --from-file config --namespace kube-system

동기화가 완료된 후 iptables에 변경 사항이 표시됩니다.

iptables -t nat -L IP-MASQ-AGENT
Chain IP-MASQ-AGENT (1 references)
target     prot opt source               destination
RETURN     all  --  anywhere             169.254.0.0/16       /* ip-masq-agent: cluster-local traffic should not be subject to MASQUERADE */ ADDRTYPE match dst-type !LOCAL
RETURN     all  --  anywhere             10.0.0.0/8           /* ip-masq-agent: cluster-local */
MASQUERADE  all  --  anywhere            anywhere             /* ip-masq-agent: outbound traffic should be subject to MASQUERADE (this match must come after cluster-local CIDR matches) */ ADDRTYPE match dst-type !LOCAL

수동으로 ip-masq-agent 리소스 만들기(선택 사항)

수동으로 ip-masq-agent를 만들고 구성해야 할 수도 있습니다. 그러려면 클러스터에 ip-masq-agent 리소스를 배포해야 합니다.

다음 명령어를 실행합니다.

kubectl apply -f \
https://raw.githubusercontent.com/kubernetes-incubator/ip-masq-agent/master/ip-masq-agent.yaml

이 명령어는 Kubernetes가 제공하는 구성 파일을 적용합니다.

다음으로 만든 ip-masq-agent 리소스를 사용하는 노드와 DeamonSet에 masq-agent-ds-ready 라벨을 적용합니다. 노드와 DaemonSet에 라벨을 지정하는 것은 ip-masq-agent가 이 리소스에서 작동해야 함을 나타냅니다.

kubectl label nodes [NAME] beta.kubernetes.io/masq-agent-ds-ready=true
kubectl label daemonsets [NAME] beta.kubernetes.io/masq-agent-ds-ready=true -n kube-system

여기서 [NAME]은 리소스의 이름입니다.

ip-masq-agent 도구를 구성하려면 ConfigMap을 사용하여 에이전트 구성을 참조하세요.

다음 단계

이 페이지가 도움이 되었나요? 평가를 부탁드립니다.

다음에 대한 의견 보내기...

Kubernetes Engine