이 가이드에서는 GKE on AWS에 Anthos Service Mesh 1.9.8-asm.6 버전을 설치하는 방법을 설명합니다.
Anthos Service Mesh를 사용하면 Istio 인그레스 게이트웨이가 사전 설치됩니다. 하지만 인그레스 컨트롤러를 사용하려는 경우 Anthos Service Mesh를 사용하여 Kubernetes 인그레스 리소스를 설정할 수 있습니다. 이 가이드에서는 Anthos Service Mesh를 설치하고 선택적으로 Kubernetes 인그레스 리소스를 설정하는 방법을 보여줍니다.
시작하기 전에
Anthos Service Mesh 설치를 시작하기 전에 다음 태스크를 수행했는지 확인합니다.
- 관리 서비스를 설치합니다.
- 사용자 클러스터를 만듭니다.
- AWS 네트워킹을 설정합니다.
- 설정을 시작하기 전에 다음 요구사항 및 제한사항을 검토합니다.
요구사항
Anthos Service Mesh를 설치하는 사용자 클러스터에 최소 4개의 vCPU, 15GB 메모리, 4개의 노드가 있는지 확인합니다.
워크로드를 배포하기 전에 서비스 포트 이름 지정을 검토합니다.
클러스터 버전이 지원되는 플랫폼 목록에 있는지 확인합니다.
제한사항
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
설치 파일 다운로드
Linux
Anthos Service Mesh 설치 파일을 현재 작업 디렉터리에 다운로드합니다.
curl -LO https://storage.googleapis.com/gke-release/asm/istio-1.9.8-asm.6-linux-amd64.tar.gz
서명 파일을 다운로드하고
openssl
을 사용하여 서명을 확인합니다.curl -LO https://storage.googleapis.com/gke-release/asm/istio-1.9.8-asm.6-linux-amd64.tar.gz.1.sig openssl dgst -verify /dev/stdin -signature istio-1.9.8-asm.6-linux-amd64.tar.gz.1.sig istio-1.9.8-asm.6-linux-amd64.tar.gz <<'EOF' -----BEGIN PUBLIC KEY----- MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEWZrGCUaJJr1H8a36sG4UUoXvlXvZ wQfk16sxprI2gOJ2vFFggdq3ixF2h4qNBt0kI7ciDhgpwS8t+/960IsIgw== -----END PUBLIC KEY----- EOF
예상되는 출력은
Verified OK
입니다.원하는 파일 시스템 위치에 파일 콘텐츠 압축을 풉니다. 예를 들어 콘텐츠를 현재 작업 디렉터리에 추출하려면 다음을 사용하세요.
tar xzf istio-1.9.8-asm.6-linux-amd64.tar.gz
이 명령어는 다음을 포함하는 현재 작업 디렉터리에
istio-1.9.8-asm.6
이라는 설치 디렉터리를 만듭니다.- 샘플 애플리케이션은
samples
디렉터리에 있습니다. - Anthos Service Mesh를 설치하는 데 사용하는
istioctl
명령줄 도구는bin
디렉터리에 있습니다. - Anthos Service Mesh 구성 프로필은
manifests/profiles
디렉터리에 있습니다.
- 샘플 애플리케이션은
Anthos Service Mesh 설치 루트 디렉터리에 있는지 확인합니다.
cd istio-1.9.8-asm.6
MacOS
Anthos Service Mesh 설치 파일을 현재 작업 디렉터리에 다운로드합니다.
curl -LO https://storage.googleapis.com/gke-release/asm/istio-1.9.8-asm.6-osx.tar.gz
서명 파일을 다운로드하고
openssl
을 사용하여 서명을 확인합니다.curl -LO https://storage.googleapis.com/gke-release/asm/istio-1.9.8-asm.6-osx.tar.gz.1.sig openssl dgst -sha256 -verify /dev/stdin -signature istio-1.9.8-asm.6-osx.tar.gz.1.sig istio-1.9.8-asm.6-osx.tar.gz <<'EOF' -----BEGIN PUBLIC KEY----- MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEWZrGCUaJJr1H8a36sG4UUoXvlXvZ wQfk16sxprI2gOJ2vFFggdq3ixF2h4qNBt0kI7ciDhgpwS8t+/960IsIgw== -----END PUBLIC KEY----- EOF
예상되는 출력은
Verified OK
입니다.원하는 파일 시스템 위치에 파일 콘텐츠 압축을 풉니다. 예를 들어 콘텐츠를 현재 작업 디렉터리에 추출하려면 다음을 사용하세요.
tar xzf istio-1.9.8-asm.6-osx.tar.gz
이 명령어는 다음을 포함하는 현재 작업 디렉터리에
istio-1.9.8-asm.6
이라는 설치 디렉터리를 만듭니다.- 샘플 애플리케이션은
samples
디렉터리에 있습니다. - Anthos Service Mesh를 설치하는 데 사용하는
istioctl
명령줄 도구는bin
디렉터리에 있습니다. - Anthos Service Mesh 구성 프로필은
manifests/profiles
디렉터리에 있습니다.
- 샘플 애플리케이션은
Anthos Service Mesh 설치 루트 디렉터리에 있는지 확인합니다.
cd istio-1.9.8-asm.6
Windows
Anthos Service Mesh 설치 파일을 현재 작업 디렉터리에 다운로드합니다.
curl -LO https://storage.googleapis.com/gke-release/asm/istio-1.9.8-asm.6-win.zip
서명 파일을 다운로드하고
openssl
을 사용하여 서명을 확인합니다.curl -LO https://storage.googleapis.com/gke-release/asm/istio-1.9.8-asm.6-win.zip.1.sig openssl dgst -verify - -signature istio-1.9.8-asm.6-win.zip.1.sig istio-1.9.8-asm.6-win.zip <<'EOF' -----BEGIN PUBLIC KEY----- MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEWZrGCUaJJr1H8a36sG4UUoXvlXvZ wQfk16sxprI2gOJ2vFFggdq3ixF2h4qNBt0kI7ciDhgpwS8t+/960IsIgw== -----END PUBLIC KEY----- EOF
예상되는 출력은
Verified OK
입니다.원하는 파일 시스템 위치에 파일 콘텐츠 압축을 풉니다. 예를 들어 콘텐츠를 현재 작업 디렉터리에 추출하려면 다음을 사용하세요.
tar xzf istio-1.9.8-asm.6-win.zip
이 명령어는 다음을 포함하는 현재 작업 디렉터리에
istio-1.9.8-asm.6
이라는 설치 디렉터리를 만듭니다.- 샘플 애플리케이션은
samples
디렉터리에 있습니다. - Anthos Service Mesh를 설치하는 데 사용하는
istioctl
명령줄 도구는bin
디렉터리에 있습니다. - Anthos Service Mesh 구성 프로필은
manifests/profiles
디렉터리에 있습니다.
- 샘플 애플리케이션은
Anthos Service Mesh 설치 루트 디렉터리에 있는지 확인합니다.
cd istio-1.9.8-asm.6
Anthos Service Mesh 설치
이 섹션에서는 asm-multicloud
프로필의 지원되는 기능 페이지에 나열된 지원되는 기본 기능을 사용 설정하는 Anthos Service Mesh를 사용자 클러스터에 설치하는 방법을 설명합니다. 공개 서브넷 또는 비공개 서브넷에 대해 인그레스를 사용 설정하는 방법을 선택할 수 있습니다.
공개
필요한 경우
istio-1.9.8-asm.6
디렉터리로 변경합니다.istioctl
클라이언트는 버전에 따라 다릅니다.istio-1.9.8-asm.6/bin
디렉터리의 버전을 사용해야 합니다.다음 명령어를 실행하여 Anthos Service Mesh를 설치합니다. 지원되는 선택 기능을 사용 설정하려면 다음 명령줄에
-f
와 YAML 파일 이름을 포함합니다. 자세한 내용은 선택 기능 사용 설정을 참조하세요.Anthos Service Mesh 설치:
bin/istioctl install \ -f manifests/profiles/asm-multicloud.yaml \ --set revision=asm-198-6
--set revision
인수는istio.io/rev=asm-198-6
형식의 버전 라벨을istiod
에 추가합니다. 버전 라벨은 자동 사이드카 인젝터 웹훅에서 삽입된 사이드카를 특정istiod
버전과 연결하는 데 사용됩니다. 네임스페이스에 사이드카 자동 삽입을 사용 설정하려면istiod
의 라벨과 일치하는 버전으로 라벨을 지정해야 합니다.버전 라벨이 있는
istiod
서비스를 찾을 수 있도록 유효성 검증 웹훅을 구성합니다.kubectl apply -f istiod-service.yaml
이 명령어는 유효성 검증 웹훅이 구성을 적용하기 전에 구성을 자동으로 확인할 수 있는 서비스 항목을 만듭니다.
비공개
다음 섹션에서는 Anthos Service Mesh로 생성되는 모든 서비스에 service.beta.kubernetes.io/aws-load-balancer-internal
주석을 추가합니다. 이 주석이 있으면 GKE on AWS가 비공개 인그레스 서비스를 만듭니다.
필요한 경우
istio-1.9.8-asm.6
디렉터리로 변경합니다.istioctl
클라이언트는 버전에 따라 다릅니다.istio-1.9.8-asm.6/bin
디렉터리의 버전을 사용해야 합니다.다음 YAML을
istio-operator-internal-lb.yaml
파일에 저장합니다.apiVersion: install.istio.io/v1alpha1 kind: IstioOperator spec: components: ingressGateways: - enabled: true k8s: serviceAnnotations: service.beta.kubernetes.io/aws-load-balancer-internal: "true" name: istio-ingressgateway
다음 명령어를 실행하여 Anthos Service Mesh를 설치합니다. 지원되는 선택 기능을 사용 설정하려면 다음 명령줄에
-f
와 YAML 파일 이름을 포함합니다. 자세한 내용은 선택 기능 사용 설정을 참조하세요.bin/istioctl install \ -f manifests/profiles/asm-multicloud.yaml \ --set revision=asm-198-6 \ -f istio-operator-internal-lb.yaml
--set revision
인수는istio.io/rev=asm-198-6
형식의 버전 라벨을istiod
에 추가합니다. 버전 라벨은 자동 사이드카 인젝터 웹훅에서 삽입된 사이드카를 특정istiod
버전과 연결하는 데 사용됩니다. 네임스페이스에 사이드카 자동 삽입을 사용 설정하려면istiod
의 라벨과 일치하는 버전으로 라벨을 지정해야 합니다.버전 라벨이 있는
istiod
서비스를 찾을 수 있도록 유효성 검증 웹훅을 구성합니다.kubectl apply -f istiod-service.yaml
이 명령어는 유효성 검증 웹훅이 구성을 적용하기 전에 구성을 자동으로 확인할 수 있는 서비스 항목을 만듭니다.
제어 영역 구성요소 확인
istio-system
의 제어 영역 pod가 작동 중인지 확인합니다.
kubectl get pod -n istio-system
예상 출력은 다음과 비슷합니다.
NAME READY STATUS RESTARTS AGE istio-ingressgateway-74cc894bfd-786rg 1/1 Running 0 7m19s istiod-78cdbbbdb-d7tps 1/1 Running 0 7m36s promsd-576b8db4d6-lqf64 2/2 Running 1 7m19s
이제 인그레스 게이트웨이가 사전 설치된 상태로 Anthos Service Mesh 제어 영역이 설치되었습니다. 인그레스 컨트롤러를 사용하는 인그레스 기능만 필요한 경우, 이제 클러스터에 애플리케이션을 설치할 수 있습니다. 인그레스 리소스를 구성하는 방법은 예시 배포 만들기를 참조하세요.
Anthos Service Mesh가 제공하는 모든 기능을 활용하려면 사이드카 프록시를 삽입하고 워크로드를 다시 시작하기 위해 다음 설치 단계로 계속 진행합니다.
사이드카 프록시 삽입
Anthos Service Mesh는 사이드카 프록시를 사용하여 네트워크 보안, 안정성, 관측 가능성을 개선합니다. Anthos Service Mesh를 사용하면 이러한 함수가 애플리케이션의 기본 컨테이너에서 추상화되고 동일한 포드에서 별도의 컨테이너로 제공되는 공용 프로세스 외부 프록시로 구현됩니다.
자동 사이드카 프록시 삽입(자동 삽입)을 사용 설정하고 Anthos Service Mesh를 설치하기 전에 클러스터에서 실행 중이었던 모든 워크로드의 포드를 다시 시작해야 설치가 완료됩니다.
자동 삽입을 사용 설정하려면 Anthos Service Mesh를 설치할 때 istiod
에 설정한 버전 라벨을 네임스페이스에 지정합니다. 버전 라벨은 사이드카 인젝터 웹훅에서 삽입된 사이드카를 특정 istiod
버전과 연결하는 데 사용됩니다. 라벨을 추가한 후 사이드카를 삽입하려면 네임스페이스의 기존 포드를 다시 시작해야 합니다.
새 네임스페이스에 새 워크로드를 배포하기 전에 자동 삽입을 구성해야 Anthos Service Mesh가 트래픽을 모니터링하고 보호할 수 있습니다.
자동 삽입을 사용 설정하려면 다음을 실행하세요.
다음 명령어를 사용하여
istiod
에서 버전 라벨을 찾습니다.kubectl -n istio-system get pods -l app=istiod --show-labels
출력은 다음과 유사합니다.
NAME READY STATUS RESTARTS AGE LABELS istiod-asm-198-6-5788d57586-bljj4 1/1 Running 0 23h app=istiod,istio.io/rev=asm-198-6,istio=istiod,pod-template-hash=5788d57586 istiod-asm-198-6-5788d57586-vsklm 1/1 Running 1 23h app=istiod,istio.io/rev=asm-198-6,istio=istiod,pod-template-hash=5788d57586
출력의
LABELS
열 아래에서istio.io/rev=
프리픽스 다음에 있는istiod
버전 라벨의 값을 확인합니다. 이 예시에서 값은asm-198-6
입니다.버전 라벨을 적용하고
istio-injection
라벨이 있는 경우 삭제합니다. 다음 명령어에서NAMESPACE
는 자동 삽입을 사용 설정할 네임스페이스의 이름이며REVISION
은 이전 단계에서 표시된 버전 라벨입니다.kubectl label namespace NAMESPACE istio-injection- istio.io/rev=REVISION --overwrite
출력에서
"istio-injection not found"
메시지는 무시해도 됩니다. 즉, 네임스페이스에 이전에istio-injection
라벨이 사용되지 않았으며, Anthos Service Mesh를 새로 설치하거나 새로 배포해야 합니다. 네임스페이스에istio-injection
및 버전 라벨이 모두 포함된 경우 자동 삽입이 실패하기 때문에 Anthos Service Mesh 문서에서 모든kubectl label
명령어에는istio-injection
라벨 삭제가 포함됩니다.Anthos Service Mesh를 설치하기 전에 클러스터에서 워크로드를 실행 중인 경우 포드를 다시 시작하여 재삽입을 트리거합니다.
포드를 다시 시작하는 방법은 애플리케이션과 클러스터가 있는 환경에 따라 달라집니다. 예를 들어 스테이징 환경에서 모든 포드를 간단히 삭제하면 다시 시작됩니다. 하지만 프로덕션 환경에서는 트래픽 중단을 방지하기 위해 포드를 안전하게 다시 시작할 수 있도록 블루-그린 배포를 구현하는 프로세스가 있을 수 있습니다.
kubectl
를 사용하여 순차적 재시작을 수행할 수 있습니다.kubectl rollout restart deployment -n NAMESPACE
pod가 새 버전의
istiod
를 가리키도록 구성되었는지 확인합니다.kubectl get pods -n NAMESPACE -l istio.io/rev=REVISION
인그레스 게이트웨이 액세스
Anthos Service Mesh는 서비스 메시에서 실행되는 애플리케이션에 대한 인바운드 트래픽을 관리하는 데 사용할 수 있는 사전 구성된 인그레스 게이트웨이 istio-ingressgateway
를 제공합니다. 클러스터 외부에서(예: 브라우저에서) 애플리케이션에 액세스할 수 있도록 하려면 다음 안내를 따르세요.
istio-ingressgateway
가 사용하도록 구성되는 외부 부하 분산기의 호스트 이름과 포트 또는 외부 IP 주소를 가져와야 합니다.애플리케이션은 Online Boutique 샘플 애플리케이션의
frontend-gateway.yaml
와 마찬가지로 게이트웨이 및 VirtualService 리소스를 정의해야 합니다.
istio-ingressgateway
의 외부 IP 주소를 가져오려면 다음 안내를 따르세요.
INGRESS_HOST
환경 변수를 만듭니다.export INGRESS_HOST=$(kubectl -n istio-system get service istio-ingressgateway -o jsonpath='{.status.loadBalancer.ingress[0].hostname}')
INGRESS_PORT
환경 변수를 만듭니다.export INGRESS_PORT=$(kubectl -n istio-system get service istio-ingressgateway -o jsonpath='{.spec.ports[?(@.name=="http2")].port}')
테스트하려면 Online Boutique와 같은 샘플 애플리케이션을 배포합니다.
브라우저에서 애플리케이션에 액세스하려면 URL에
$INGRESS_HOST:$INGRESS_PORT
값을 사용합니다.
다음 단계
- AWS용 GKE에 배포 예시를 만듭니다.