자동 Envoy 삽입을 사용하는 Google Kubernetes Engine pod 설정 옵션

이 가이드에서는 자동 Envoy 사이드카 인젝터의 추가 옵션과 작업에 대한 정보를 제공합니다.

기존 워크로드에 사이드카 프록시 추가

사이드카 인젝터를 클러스터에 설치하면 사용 설정된 네임스페이스에 새로 생성된 pod에 사이드카 프록시가 자동으로 삽입됩니다. 사이드카 인젝터를 사용 설정하기 전에 이미 워크로드가 실행되고 있는 경우 삽입이 이루어지려면 다시 시작해야 합니다.

Deployment, DaemonSet 또는 StatefulSet 컨트롤러에서 관리하는 pod의 경우 다음을 실행할 수 있습니다.

# Deployment
kubectl rollout restart deployment/DEPLOYMENT_NAME --namespace NAMESPACE

# DaemonSet
kubectl rollout restart daemonset/DAEMONSET_NAME --namespace NAMESPACE

# StatefulSet
kubectl rollout restart statefulset/STATEFULSET_NAME --namespace NAMESPACE

위의 컨트롤러를 사용하여 pod를 배포하지 않은 경우 pod를 개별적으로 삭제해야 합니다. 이후에는 새로운 사이드카 프록시를 사용하여 자동으로 다시 생성됩니다.

kubectl delete pod POD_NAME -n NAMESPACE

각 pod에 사이드카 프록시 컨테이너가 삽입되었는지 확인합니다.

kubectl get pods -n NAMESPACE

예를 들어 위에서 busybox 클라이언트를 만들면 busybox 애플리케이션 자체용과 삽입된 Envoy 사이드카 프록시용으로 pod 2/2개가 실행됩니다.

NAME                      READY   STATUS    RESTARTS   AGE
busybox-c54f578c9-c9fk4   2/2     Running   183        7d15h

삽입 재정의

기본적으로 네임스페이스를 사용 설정하면 모든 상주 pod에 사이드카 프록시 삽입이 사용 설정됩니다. 삽입은 특정 요구에 맞게 다양한 범위에 대해 선택적으로 구성할 수도 있습니다. 예를 들어 프록시리스 gRPC 서비스의 사이드카 프록시 삽입을 방지하려면 재정의를 사용해야 합니다.

삽입 재정의는 네임스페이스가 사용 설정된 경우에만 적용되고, pod 주석 > NeverInjorSelector > AlwaysInjorSelector > 기본 정책 우선순위에 적용됩니다.

특정 개별 pod에 대한 삽입 사용 설정/중지

다음 pod 주석을 사용하여 사용 설정된 네임스페이스의 특정 pod에 삽입을 사용 설정 또는 중지합니다.

...
metadata:
  annotations:
    sidecar.istio.io/inject: "true" / "false"

특정 pod 그룹에 대한 삽입 사용 설정/중지

사이드카 인젝터 자체는 Kubernetes 라벨 선택기 배열을 기반으로 사용 설정된 네임스페이스에 항상 pod를 삽입하거나 혹은 절대 삽입하지 않도록 구성할 수 있습니다. 예를 들어 pod에 'run=client' 라벨이 있으면 사이드카 인젝터가 사이드카 프록시를 삽입하지 않도록 다음 명령어를 사용합니다.

kubectl edit configmap -n istio-control istio-sidecar-injector

...
config: |-
  policy: enabled
  alwaysInjectSelector:
    []

  neverInjectSelector:
    - matchLabels:
        run: client
...

이 구성을 적용하려면 기존 사이드카 인젝터 배포를 다시 시작해야 합니다.

사이드카 프록시 메타데이터 구성

추가 Traffic Director 기능을 지원하기 위해 사이드카 프록시는 캡슐화하는 Pod에서 특정 메타데이터를 상속할 수 있습니다. 예를 들어 Pod 템플릿 사양에 다음 주석을 포함하여 삽입된 사이드카 프록시에 'version=dev' 라벨을 적용합니다.

...
metadata:
  annotations:
    cloud.google.com/proxyMetadata: '{"version": "dev"}'

그러면 구성 필터링은 Traffic Director가 이 'version=dev' 라벨과 일치하는 특정 프록시하고만 구성의 하위 집합을 공유하도록 허용합니다.

이 구성을 적용하려면 기존 배포를 다시 시작해야 합니다.

지원되는 pod 주석

Traffic Director는 사이드카 주입을 위해 다음 pod 주석을 지원합니다. 추가 사이드카 인젝터 주석이 작동할 수는 있지만 다음 목록은 Traffic Director가 지원하는 주석을 나타냅니다. 장애 또는 불안정성을 방지하려면 프로덕션 배포에서 다른 주석에 대한 종속 항목을 만들지 마세요.

주석 이름 설명
sidecar.istio.io/inject 문자열로 표시되는 부울입니다. 예를 들면 'true'입니다. Envoy 사이드카를 워크로드에 자동으로 삽입해야 하는지 여부를 지정합니다.
cloud.google.com/proxyMetadata 키-값 쌍의 JSON 맵입니다. 예를 들면 ''{"version": "dev"}''입니다. Envoy 메타데이터에 추가해야 하는 JSON 맵의 키-값 쌍을 지정합니다.

사이드카 인젝터 제거

다음 명령어를 사용하여 사이드카 인젝터를 제거합니다.

kubectl delete -f specs/
kubectl label namespace default istio-injection-