연결된 클러스터에 Anthos Service Mesh 설치

이 가이드에서는 GKE Enterprise 연결 클러스터에 Anthos Service Mesh 버전 1.6.14-asm.2의 클린 설치를 수행하는 방법을 설명합니다. 이 가이드를 사용하여 다음 환경에 Anthos Service Mesh를 설치합니다.

  • Kubernetes 버전 1.16의 Amazon Elastic Kubernetes Service(Amazon EKS)
  • Kubernetes 버전 1.16의 Microsoft Azure Kubernetes Service(Microsoft AKS)

설치 시 클러스터에서 asm-multicloud 구성 프로필에 지원되는 기능이 사용 설정됩니다.

시작하기 전에

요구사항

  • Anthos Service Mesh를 설치하는 사용자 클러스터에는 최소 4개의 vCPU, 15GB 메모리, 4개의 복제본이 있습니다.

  • 클러스터에 Anthos Service Mesh 또는 오픈소스 Istio가 설치되어 있지 않습니다.

  • 서비스 메시에 포함하려면 서비스 포트의 이름이 지정되어야 하며 이름은 name: protocol[-suffix] 구문에서 포트 프로토콜을 포함해야 합니다. 여기서 대괄호는 대시로 시작해야 하는 선택적 서픽스를 나타냅니다. 자세한 내용은 서비스 포트 이름 지정을 참조하세요.

제한사항

Google Cloud 프로젝트에는 하나의 메시만 연결할 수 있습니다.

환경 설정

Anthos Service Mesh를 설치할 머신에 다음 도구가 필요합니다. Anthos Service Mesh는 관리자 클러스터가 아닌 사용자 클러스터에만 설치할 수 있습니다.

Google Cloud CLI를 설치한 후 다음을 수행합니다.

  1. Google Cloud CLI로 인증합니다.

    gcloud auth login
    
  2. 구성요소를 업데이트합니다.

    gcloud components update
    
  3. kubectl을 설치합니다.

    gcloud components install kubectl
    
  4. 필요한 kpt 버전을 설치합니다.

       curl -L https://github.com/GoogleContainerTools/kpt/releases/download/v0.39.2/kpt_linux_amd64 > kpt_0_39_2
       chmod +x kpt_0_39_2
       alias kpt="$(readlink -f kpt_0_39_2)"
    
  5. 컨텍스트를 사용자 클러스터로 전환합니다.

    kubectl config use-context CLUSTER_NAME
  6. 클러스터 관리자 권한을 사용자 계정(Google Cloud 로그인 이메일 주소)에 부여합니다. Anthos Service Mesh에 필요한 역할 기반 액세스 제어(RBAC) 규칙을 만들려면 이러한 권한이 필요합니다.

    kubectl create clusterrolebinding cluster-admin-binding \
      --clusterrole=cluster-admin \
      --user=USER_ACCOUNT

Anthos Service Mesh 설치 준비

    Linux

  1. Anthos Service Mesh 설치 파일을 현재 작업 디렉터리에 다운로드합니다.
    curl -LO https://storage.googleapis.com/gke-release/asm/istio-1.6.14-asm.2-linux-amd64.tar.gz
  2. 서명 파일을 다운로드하고 openssl을 사용하여 서명을 확인합니다.
    curl -LO https://storage.googleapis.com/gke-release/asm/istio-1.6.14-asm.2-linux-amd64.tar.gz.1.sig
    openssl dgst -verify /dev/stdin -signature istio-1.6.14-asm.2-linux-amd64.tar.gz.1.sig istio-1.6.14-asm.2-linux-amd64.tar.gz <<'EOF'
    -----BEGIN PUBLIC KEY-----
    MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEWZrGCUaJJr1H8a36sG4UUoXvlXvZ
    wQfk16sxprI2gOJ2vFFggdq3ixF2h4qNBt0kI7ciDhgpwS8t+/960IsIgw==
    -----END PUBLIC KEY-----
    EOF

    예상되는 출력은 Verified OK입니다.

  3. 원하는 파일 시스템 위치에 파일 콘텐츠 압축을 풉니다. 예를 들어 콘텐츠를 현재 작업 디렉터리에 추출하려면 다음을 사용하세요.
    tar xzf istio-1.6.14-asm.2-linux-amd64.tar.gz

    이 명령어는 다음을 포함하는 현재 작업 디렉터리에 istio-1.6.14-asm.2이라는 설치 디렉터리를 만듭니다.

    • 샘플 애플리케이션은 samples 디렉터리에 있습니다.
    • Anthos Service Mesh를 설치하는 데 사용하는 istioctl 명령줄 도구는 bin 디렉터리에 있습니다.
    • Anthos Service Mesh 구성 프로필은 manifests/profiles 디렉터리에 있습니다.

  4. MacOS

  5. Anthos Service Mesh 설치 파일을 현재 작업 디렉터리에 다운로드합니다.
    curl -LO https://storage.googleapis.com/gke-release/asm/istio-1.6.14-asm.2-osx.tar.gz
  6. 서명 파일을 다운로드하고 openssl을 사용하여 서명을 확인합니다.
    curl -LO https://storage.googleapis.com/gke-release/asm/istio-1.6.14-asm.2-osx.tar.gz.1.sig
    openssl dgst -sha256 -verify /dev/stdin -signature istio-1.6.14-asm.2-osx.tar.gz.1.sig istio-1.6.14-asm.2-osx.tar.gz <<'EOF'
    -----BEGIN PUBLIC KEY-----
    MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEWZrGCUaJJr1H8a36sG4UUoXvlXvZ
    wQfk16sxprI2gOJ2vFFggdq3ixF2h4qNBt0kI7ciDhgpwS8t+/960IsIgw==
    -----END PUBLIC KEY-----
    EOF

    예상되는 출력은 Verified OK입니다.

  7. 원하는 파일 시스템 위치에 파일 콘텐츠 압축을 풉니다. 예를 들어 콘텐츠를 현재 작업 디렉터리에 추출하려면 다음을 사용하세요.
    tar xzf istio-1.6.14-asm.2-osx.tar.gz

    이 명령어는 다음을 포함하는 현재 작업 디렉터리에 istio-1.6.14-asm.2이라는 설치 디렉터리를 만듭니다.

    • 샘플 애플리케이션은 samples 디렉터리에 있습니다.
    • Anthos Service Mesh를 설치하는 데 사용하는 istioctl 명령줄 도구는 bin 디렉터리에 있습니다.
    • Anthos Service Mesh 구성 프로필은 manifests/profiles 디렉터리에 있습니다.

  8. Windows

  9. Anthos Service Mesh 설치 파일을 현재 작업 디렉터리에 다운로드합니다.
    curl -LO https://storage.googleapis.com/gke-release/asm/istio-1.6.14-asm.2-win.zip
  10. 서명 파일을 다운로드하고 openssl을 사용하여 서명을 확인합니다.
    curl -LO https://storage.googleapis.com/gke-release/asm/istio-1.6.14-asm.2-win.zip.1.sig
    openssl dgst -verify - -signature istio-1.6.14-asm.2-win.zip.1.sig istio-1.6.14-asm.2-win.zip <<'EOF'
    -----BEGIN PUBLIC KEY-----
    MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEWZrGCUaJJr1H8a36sG4UUoXvlXvZ
    wQfk16sxprI2gOJ2vFFggdq3ixF2h4qNBt0kI7ciDhgpwS8t+/960IsIgw==
    -----END PUBLIC KEY-----
    EOF

    예상되는 출력은 Verified OK입니다.

  11. 원하는 파일 시스템 위치에 파일 콘텐츠 압축을 풉니다. 예를 들어 콘텐츠를 현재 작업 디렉터리에 추출하려면 다음을 사용하세요.
    tar xzf istio-1.6.14-asm.2-win.zip

    이 명령어는 다음을 포함하는 현재 작업 디렉터리에 istio-1.6.14-asm.2이라는 설치 디렉터리를 만듭니다.

    • 샘플 애플리케이션은 samples 디렉터리에 있습니다.
    • Anthos Service Mesh를 설치하는 데 사용하는 istioctl 명령줄 도구는 bin 디렉터리에 있습니다.
    • Anthos Service Mesh 구성 프로필은 manifests/profiles 디렉터리에 있습니다.

  12. Anthos Service Mesh 설치 루트 디렉터리에 있는지 확인합니다.
    cd istio-1.6.14-asm.2
  13. 편의를 위해 /bin 디렉터리의 도구를 PATH에 추가합니다.
    export PATH=$PWD/bin:$PATH

istio-system 네임스페이스를 만듭니다.

제어 영역 구성요소에 대해 istio-system이라는 네임스페이스를 만듭니다.

kubectl create namespace istio-system

유효성 검증 웹훅 구성

Anthos Service Mesh를 설치할 때 istiod에 버전 라벨을 설정합니다. 유효성 검증 웹훅에 동일한 버전을 설정해야 합니다.

다음 YAML을 istiod-service.yaml 파일에 복사합니다.

apiVersion: v1
kind: Service
metadata:
  name: istiod
  namespace: istio-system
  labels:
    istio.io/rev: asm-1614-2
    app: istiod
    istio: pilot
    release: istio
spec:
  ports:
    - port: 15010
      name: grpc-xds # plaintext
      protocol: TCP
    - port: 15012
      name: https-dns # mTLS with k8s-signed cert
      protocol: TCP
    - port: 443
      name: https-webhook # validation and injection
      targetPort: 15017
      protocol: TCP
    - port: 15014
      name: http-monitoring # prometheus stats
      protocol: TCP
  selector:
    app: istiod
    istio.io/rev: asm-1614-2

Anthos Service Mesh 설치

  1. 다음 명령어를 실행하여 asm-multicloud 프로필로 Anthos Service Mesh를 설치합니다. 지원되는 선택 기능을 사용 설정하려면 다음 명령줄에 -f와 YAML 파일 이름을 포함합니다. 자세한 내용은 선택 기능 사용 설정을 참조하세요.

    istioctl install \
      --set profile=asm-multicloud \
      --set revision=asm-1614-2
    

    --set revision 인수는 istio.io/rev=asm-1614-2 형식의 버전 라벨을 istiod에 추가합니다. 버전 라벨은 자동 사이드카 인젝터 웹훅에서 삽입된 사이드카를 특정 istiod 버전과 연결하는 데 사용됩니다. 네임스페이스에 사이드카 자동 삽입을 사용 설정하려면 istiod의 라벨과 일치하는 버전으로 라벨을 지정해야 합니다.

  2. 버전 라벨이 있는 istiod 서비스를 찾을 수 있도록 유효성 검증 웹훅을 구성합니다.

    kubectl apply -f istiod-service.yaml
    

    이 명령어는 유효성 검증 웹훅이 구성을 적용하기 전에 구성을 자동으로 확인할 수 있는 서비스 항목을 만듭니다.

자동 상호 TLS(자동 mTLS)가 기본적으로 사용 설정됩니다. 자동 mTLS를 사용하면 클라이언트 사이드카 프록시가 서버에 사이드카가 있는지 자동으로 감지합니다. 클라이언트 사이드카는 사이드카가 있는 워크로드에는 mTLS를 전송하고, 사이드카 없는 워크로드에는 일반 텍스트 트래픽을 전송합니다.

제어 영역 구성요소 확인

istio-system의 제어 영역 pod가 작동 중인지 확인합니다.

kubectl get pod -n istio-system

예상 출력은 다음과 비슷합니다.

NAME                                   READY   STATUS      RESTARTS   AGE
istio-ingressgateway-cff9f5c7d-qg4ls   1/1     Running   0          7m5s
istio-ingressgateway-cff9f5c7d-vlkzb   1/1     Running   0          7m20s
istiod-66b587859c-886gx                1/1     Running   0          7m33s
istiod-66b587859c-dfs2j                1/1     Running   0          7m33s

명령어의 출력에 하나 이상의 구성요소가 Running 상태가 아닌 것으로 표시되면 연결된 클러스터에서 GKE Enterprise 문제 해결을 참조하여 구성요소에 대한 세부정보를 얻기 위해 실행할 수 있는 스크립트를 확인할 수 있습니다.

사이드카 프록시 삽입

Anthos Service Mesh는 사이드카 프록시를 사용하여 네트워크 보안, 안정성, 관측 가능성을 개선합니다. Anthos Service Mesh를 사용하면 이러한 함수가 애플리케이션의 기본 컨테이너에서 추상화되고 동일한 포드에서 별도의 컨테이너로 제공되는 공용 프로세스 외부 프록시로 구현됩니다.

워크로드를 배포하기 전에 사이드카 프록시 삽입을 구성하여 Anthos Service Mesh가 트래픽을 모니터링하고 보호할 수 있도록 해야 합니다.

Anthos Service Mesh를 설치하기 전에 클러스터에서 실행 중이었던 모든 워크로드는 현재 Anthos Service Mesh 버전을 포함하도록 사이드카 프록시를 삽입하거나 업데이트해야 합니다. 새 워크로드를 배포하기 전에 사이드카 프록시 삽입을 구성하여 Anthos Service Mesh가 트래픽을 모니터링하고 보호할 수 있도록 해야 합니다.

사이드카 자동 삽입을 사용 설정하려면 istiod에 설정한 것과 동일한 버전으로 네임스페이스에 라벨을 지정합니다. 다음 명령어를 실행하여 istiod의 라벨을 표시합니다.

kubectl -n istio-system get pods -l app=istiod --show-labels

출력에 버전 라벨 istio.io/rev=asm-1614-2이 있는지 확인합니다. 이것은 자동 삽입을 사용 설정하는 데 사용하는 라벨입니다. 예를 들어 다음과 같은 명령어로 자동 삽입을 사용 설정할 수 있습니다.

kubectl label namespace NAMESPACE istio-injection-istio.io/rev=asm-1614-2 --overwrite

여기서 NAMESPACE는 네임스페이스를 명시적으로 만들지 않은 경우 애플리케이션 서비스의 네임스페이스 이름 또는 default입니다.

자세한 내용은 사이드카 프록시 삽입을 참조하세요.

샘플 애플리케이션 배포

Anthos Service Mesh는 서비스 메시에서 실행되는 애플리케이션에 대한 인바운드 트래픽을 관리하는 데 사용할 수 있는 사전 구성된 인그레스 게이트웨이 istio-ingressgateway를 제공합니다. 클러스터 외부에서(예: 브라우저에서) 애플리케이션에 액세스할 수 있도록 하려면 다음 안내를 따르세요.

  • istio-ingressgateway의 외부 IP 주소를 가져와야 합니다.

  • 애플리케이션은 Online Boutique 샘플 애플리케이션의 frontend-gateway.yaml와 마찬가지로 게이트웨이 및 VirtualService 리소스를 정의해야 합니다.

샘플 애플리케이션을 배포하고 실행하려면 다음 안내를 따르세요.

  1. 샘플을 다운로드합니다.

    kpt pkg get \
    https://github.com/GoogleCloudPlatform/microservices-demo.git/release \
    microservices-demo
    
  2. 자동 사이드카 삽입을 사용 설정합니다.

    kubectl label namespace default istio-injection=enabled
    
  3. 클러스터에 샘플을 배포합니다.

    kubectl apply -f microservices-demo
    

istio-ingressgateway의 외부 IP 주소를 가져오려면 다음 안내를 따르세요.

  1. 호스트 키 환경 변수를 만듭니다.

    Microsoft AKS

      export HOST_KEY="ip"
    

    Amazon EKS

      export HOST_KEY="hostname"
    
  2. INGRESS_HOST 환경 변수를 만듭니다.

    export INGRESS_HOST=$(kubectl -n istio-system get service istio-ingressgateway -o jsonpath='{.status.loadBalancer.ingress[0].'"$HOST_KEY"'}')
    
  3. INGRESS_PORT 환경 변수를 만듭니다.

    export INGRESS_PORT=$(kubectl -n istio-system get service istio-ingressgateway -o jsonpath='{.spec.ports[?(@.name=="http2")].port}')
    
  4. 브라우저에서 애플리케이션을 방문합니다. 다음 URL에서 EXTERNAL_IP$INGRESS_HOST:$INGRESS_PORT로 바꿉니다.

    http://EXTERNAL_IP/

탐색이 끝나면 샘플을 삭제합니다.

kubectl delete -f microservices-demo