본문으로 바로가기 본문 바로가기
WIKI 기술 지식 베이스

클러스터에 Istio Ambient 모드 배포하기

원문 보기 위키 갱신

Calico가 함께 제공하는 Istio를 ambient 모드로 배포하면 사이드카나 Waypoint 없이도 워크로드에 mTLS 암호화를 적용할 수 있어요. 이 문서는 기존 클러스터에 Istio ambient 메시를 설치하고, 워크로드를 메시에 추가하고, 문제가 생겼을 때 확인하는 명령까지 다뤄요. Istio를 제거하는 절차도 함께 안내해요.

출처: 문서

본문

워크로드에 mTLS 암호화를 제공하려면 Calico가 함께 제공하는 버전의 Istio를 ambient 모드로 배포할 수 있어요.

참고: Istio Ambient 모드는 기술 미리보기(tech preview) 기능이에요. 기술 미리보기 기능은 GA가 되기 전에 큰 변경이 있을 수 있어요.

제한 사항

  • 애플리케이션 계층 네트워크 정책은 Istio 서비스 메시와 호환되지 않아요.
  • 목적지 포트는 Istio를 Waypoint 없이 배포했을 때만 유지돼요. Waypoint를 배포하면 Waypoint를 통과하는 모든 트래픽의 목적지 포트가 15008로 표시돼요.
  • 연결 시점 로드 밸런싱(connect-time load balancing)은 Istio Ambient 모드와 호환되지 않아요.

사전 준비 사항

  • Calico가 Tigera Operator에 의해 설치 및 관리되고 있어야 해요.

클러스터에 ambient 모드로 Istio 설치하기

Istio 커스텀 리소스를 만들면 ambient 모드의 Istio 서비스 메시를 구성할 수 있어요.

  • ambient 모드로 Istio를 설치하려면 Istio 커스텀 리소스를 클러스터에 적용하세요:

    cat <<EOF | kubectl apply -f -
    apiVersion: operator.tigera.io/v1
    kind: Istio
    metadata:
      name: default
    EOF
    

    참고: Istio 배포의 리소스 요구량을 커스터마이즈하려면 설치 API 문서에서 사용할 수 있는 옵션을 참고하세요.

    설치를 확인하려면:

    kubectl get tigerastatus
    

    출력 예시

    NAME        AVAILABLE   PROGRESSING   DEGRADED   SINCE
    apiserver   True        False         False      4m9s
    calico      True        False         False      3m29s
    goldmane    True        False         False      3m39s
    ippools     True        False         False      6m4s
    istio       True        False         False      19s
    whisker     True        False         False      3m19s
    

    이제 워크로드를 Istio 서비스 메시에 추가할 수 있어요.

워크로드를 Istio 서비스 메시에 추가하기

워크로드에 레이블을 붙여 메시에 추가할 수 있어요. 레이블이 붙은 네임스페이스와 pod 사이의 통신은 메시를 통과하며 mTLS 암호화를 사용해요.

경고: Calico 리소스에 레이블을 붙여 서비스 메시에 추가하지 마세요. 그러면 클러스터 네트워크에 장애와 중단이 발생할 수 있어요.

Calico 컴포넌트를 보호하고 싶다면 Calico 컴포넌트 통신 보호하기를 참고하세요.

  1. 워크로드를 Istio 서비스 메시에 추가하려면 pod 또는 네임스페이스 리소스에 istio.io/dataplane-mode=ambient 레이블을 붙이세요:

    Istio 서비스 메시에 네임스페이스 추가하기

    kubectl label namespace <namespace> istio.io/dataplane-mode=ambient
    

    <namespace>는 메시에 포함하려는 네임스페이스로 바꾸세요.

    Istio 서비스 메시에 pod 추가하기

    kubectl label pod --namespace=<namespace> <pod> istio.io/dataplane-mode=ambient
    

    다음 값을 바꾸세요:

    • <pod>: 메시에 포함하려는 pod의 이름
    • <namespace>: 해당 pod가 속한 네임스페이스

Istio 제거하기

Istio를 제거하려면 먼저 pod와 네임스페이스에 붙였던 레이블을 제거해요. 그다음 Istio 커스텀 리소스를 삭제하면 돼요.

  1. 다음 명령으로 네임스페이스와 pod에서 레이블을 제거해요:

    kubectl label namespaces --all istio.io/dataplane-mode=ambient-
    kubectl label pods --all --all-namespaces istio.io/dataplane-mode=ambient-
    
  2. Istio 커스텀 리소스를 제거해요:

    kubectl delete istio.operator.tigera.io default
    

문제 해결 명령

Istio pod가 배포되었는지 확인해요:

kubectl get pods -n calico-system | grep 'istio\|ztunnel'

Istio CRD가 배포되었는지 확인해요:

kubectl get crd | grep istio

어떤 pod와 네임스페이스가 메시에 있는지 확인해요:

istioctl ztunnel-config workloads -n calico-system

zTunnel 컴포넌트가 기록한 오류를 확인해요:

ZTUNNEL_PODS=$(kubectl get pod -n calico-system \
  -l app.kubernetes.io/name=ztunnel \
  -o jsonpath='{.items[*].metadata.name}')

for P in $ZTUNNEL_PODS; do
  echo "--- Checking logs for pod: $P ---"
  kubectl logs $P -n calico-system 2>/dev/null | \
    grep -i error | \
    grep -i app1
done

추가 리소스

더 알아보기 (Learn more)

ambient 모드는 사이드카 없이 노드 단 ztunnel이 mTLS를 처리하기 때문에 기존 워크로드를 거의 수정 없이 메시에 넣을 수 있어요. 다만 Calico 자체 리소스를 메시에 넣지 않도록 주의하는 게 중요해요.