이 가이드에서는 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
구성 프로필에 지원되는 기능이 사용 설정됩니다.
시작하기 전에
GKE Enterprise 연결 클러스터 설정을 참조하여 Google Cloud 프로젝트를 만들고 클러스터를 프로젝트의 Fleet에 등록합니다.
다음 요구사항 및 제한사항을 검토합니다.
요구사항
Anthos Service Mesh를 설치하는 사용자 클러스터에는 최소 4개의 vCPU, 15GB 메모리, 4개의 복제본이 있습니다.
클러스터에 Anthos Service Mesh 또는 오픈소스 Istio가 설치되어 있지 않습니다.
서비스 메시에 포함하려면 서비스 포트의 이름이 지정되어야 하며 이름은
name: protocol[-suffix]
구문에서 포트 프로토콜을 포함해야 합니다. 여기서 대괄호는 대시로 시작해야 하는 선택적 서픽스를 나타냅니다. 자세한 내용은 서비스 포트 이름 지정을 참조하세요.
제한사항
Google Cloud 프로젝트에는 하나의 메시만 연결할 수 있습니다.
환경 설정
Anthos Service Mesh를 설치할 머신에 다음 도구가 필요합니다. Anthos Service Mesh는 관리자 클러스터가 아닌 사용자 클러스터에만 설치할 수 있습니다.
curl
명령줄 도구- Google Cloud CLI
Google Cloud CLI를 설치한 후 다음을 수행합니다.
Google Cloud CLI로 인증합니다.
gcloud auth login
구성요소를 업데이트합니다.
gcloud components update
kubectl
을 설치합니다.gcloud components install kubectl
필요한
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)"
컨텍스트를 사용자 클러스터로 전환합니다.
kubectl config use-context CLUSTER_NAME
클러스터 관리자 권한을 사용자 계정(Google Cloud 로그인 이메일 주소)에 부여합니다. Anthos Service Mesh에 필요한 역할 기반 액세스 제어(RBAC) 규칙을 만들려면 이러한 권한이 필요합니다.
kubectl create clusterrolebinding cluster-admin-binding \ --clusterrole=cluster-admin \ --user=USER_ACCOUNT
Anthos Service Mesh 설치 준비
- Anthos Service Mesh 설치 파일을 현재 작업 디렉터리에 다운로드합니다.
curl -LO https://storage.googleapis.com/gke-release/asm/istio-1.6.14-asm.2-linux-amd64.tar.gz
- 서명 파일을 다운로드하고
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
입니다. -
원하는 파일 시스템 위치에 파일 콘텐츠 압축을 풉니다. 예를 들어 콘텐츠를 현재 작업 디렉터리에 추출하려면 다음을 사용하세요.
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
디렉터리에 있습니다.
- 샘플 애플리케이션은
- Anthos Service Mesh 설치 파일을 현재 작업 디렉터리에 다운로드합니다.
curl -LO https://storage.googleapis.com/gke-release/asm/istio-1.6.14-asm.2-osx.tar.gz
- 서명 파일을 다운로드하고
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
입니다. -
원하는 파일 시스템 위치에 파일 콘텐츠 압축을 풉니다. 예를 들어 콘텐츠를 현재 작업 디렉터리에 추출하려면 다음을 사용하세요.
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
디렉터리에 있습니다.
- 샘플 애플리케이션은
- Anthos Service Mesh 설치 파일을 현재 작업 디렉터리에 다운로드합니다.
curl -LO https://storage.googleapis.com/gke-release/asm/istio-1.6.14-asm.2-win.zip
- 서명 파일을 다운로드하고
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
입니다. -
원하는 파일 시스템 위치에 파일 콘텐츠 압축을 풉니다. 예를 들어 콘텐츠를 현재 작업 디렉터리에 추출하려면 다음을 사용하세요.
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
디렉터리에 있습니다.
- 샘플 애플리케이션은
- Anthos Service Mesh 설치 루트 디렉터리에 있는지 확인합니다.
cd istio-1.6.14-asm.2
- 편의를 위해
/bin
디렉터리의 도구를 PATH에 추가합니다.export PATH=$PWD/bin:$PATH
Linux
MacOS
Windows
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 설치
다음 명령어를 실행하여
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
의 라벨과 일치하는 버전으로 라벨을 지정해야 합니다.버전 라벨이 있는
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 리소스를 정의해야 합니다.
샘플 애플리케이션을 배포하고 실행하려면 다음 안내를 따르세요.
샘플을 다운로드합니다.
kpt pkg get \ https://github.com/GoogleCloudPlatform/microservices-demo.git/release \ microservices-demo
자동 사이드카 삽입을 사용 설정합니다.
kubectl label namespace default istio-injection=enabled
클러스터에 샘플을 배포합니다.
kubectl apply -f microservices-demo
istio-ingressgateway
의 외부 IP 주소를 가져오려면 다음 안내를 따르세요.
호스트 키 환경 변수를 만듭니다.
Microsoft AKS
export HOST_KEY="ip"
Amazon EKS
export HOST_KEY="hostname"
INGRESS_HOST
환경 변수를 만듭니다.export INGRESS_HOST=$(kubectl -n istio-system get service istio-ingressgateway -o jsonpath='{.status.loadBalancer.ingress[0].'"$HOST_KEY"'}')
INGRESS_PORT
환경 변수를 만듭니다.export INGRESS_PORT=$(kubectl -n istio-system get service istio-ingressgateway -o jsonpath='{.spec.ports[?(@.name=="http2")].port}')
브라우저에서 애플리케이션을 방문합니다. 다음 URL에서
EXTERNAL_IP
를$INGRESS_HOST:$INGRESS_PORT
로 바꿉니다.http://EXTERNAL_IP/
탐색이 끝나면 샘플을 삭제합니다.
kubectl delete -f microservices-demo