Anthos clusters on AWS(AWS의 GKE)의 새로운 버전이 4월 30일 출시되었습니다. 자세한 정보는 출시 노트를 참조하세요.

Anthos Service Mesh를 사용한 인그레스 사용 설정

이 주제에서는 인그레스 게이트웨이가 사전 설치된 상태로 제공되는 Anthos Service Mesh를 설치하는 방법을 보여줍니다. Anthos Service Mesh에서는 인그레스 컨트롤러가 필요한 경우 배포에 대해 Kubernetes 인그레스 리소스를 구성할 수 있습니다. 이 주제에서는 샘플 배포 및 인그레스 리소스를 구성하는 방법을 보여주는 예시를 제공합니다.

시작하기 전에

Anthos clusters on AWS를 사용하기 전에 다음 작업을 수행했는지 확인합니다.

  • 관리 서비스를 설치합니다.
  • 사용자 클러스터를 만듭니다.
  • 사용자 클러스터가 인터넷으로의 아웃바운드 액세스를 제한한 경우 다음과 같은 컨테이너 저장소 도메인에 대한 액세스를 허용합니다.

    • docker.io
    • quay.io

    이러한 도메인에 대한 아웃바운드 액세스를 허용하지 않으려면 Prometheus 및 Kiali 없이 설치를 참조하세요.

  • kubectl config use context를 사용하여 컨텍스트를 사용자 클러스터로 전환합니다.

    kubectl config use-context CLUSTER_NAME

환경 설정

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

  • curl 명령줄 도구
  • Cloud SDK(gcloud 명령줄 도구).

Cloud SDK 설치 후:

  1. Cloud SDK를 사용하여 인증합니다.

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

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

    gcloud components install kubectl
    
  4. kpt을 설치합니다.

    gcloud components install kpt
    
  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

설치 파일 다운로드

  1. Anthos Service Mesh 설치 파일을 현재 작업 디렉터리에 다운로드합니다.

    curl -LO https://storage.googleapis.com/gke-release/asm/istio-1.7.3-asm.6-linux-amd64.tar.gz
  2. 서명 파일을 다운로드하고 openssl을 사용하여 서명을 확인합니다.

    curl -LO https://storage.googleapis.com/gke-release/asm/istio-1.7.3-asm.6-linux-amd64.tar.gz.1.sig
    openssl dgst -verify - -signature istio-1.7.3-asm.6-linux-amd64.tar.gz.1.sig istio-1.7.3-asm.6-linux-amd64.tar.gz <<'EOF'
    -----BEGIN PUBLIC KEY-----
    MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEWZrGCUaJJr1H8a36sG4UUoXvlXvZ
    wQfk16sxprI2gOJ2vFFggdq3ixF2h4qNBt0kI7ciDhgpwS8t+/960IsIgw==
    -----END PUBLIC KEY-----
    EOF

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

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

    tar xzf istio-1.7.3-asm.6-linux-amd64.tar.gz

    이 명령어는 현재 작업 디렉터리에 istio-1.7.3-asm.6이라는 설치 디렉터리를 만듭니다. istio-1.7.3-asm.6/bin 디렉터리에는 Anthos Service Mesh를 설치하기 위해 사용하는 istioctl 명령줄 도구가 포함됩니다.

  4. Anthos Service Mesh 설치 루트 디렉터리에 있는지 확인합니다.

    cd istio-1.7.3-asm.6

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-173-6
    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-173-6

Anthos Service Mesh 설치

이 섹션에서는 asm-multicloud 프로필의 지원되는 기능 페이지에 나열된 지원되는 기본 기능을 사용 설정하는 Anthos Service Mesh를 사용자 클러스터에 설치하는 방법을 설명합니다. 공개 서브넷 또는 비공개 서브넷에 대해 인그레스를 사용 설정하는 방법을 선택할 수 있습니다.

공개

  1. 필요한 경우 istio-1.9.3-asm.2 디렉터리로 변경합니다. istioctl 클라이언트는 버전에 따라 다릅니다. istio-1.9.3-asm.2/bin 디렉터리의 버전을 사용해야 합니다.

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

  3. Anthos Service Mesh 설치:

    bin/istioctl install \
      -f manifests/profiles/asm-multicloud.yaml \
      --set revision=asm-173-6
    

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

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

    kubectl apply -f istiod-service.yaml
    

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

비공개

다음 섹션에서는 Anthos Service Mesh로 생성되는 모든 서비스에 service.beta.kubernetes.io/aws-load-balancer-internal 주석을 추가합니다. 이 주석이 있으면 AWS 기반 Anthos 클러스터가 비공개 인그레스 서비스를 만듭니다.

  1. 필요한 경우 istio-1.9.3-asm.2 디렉터리로 변경합니다. istioctl 클라이언트는 버전에 따라 다릅니다. istio-1.9.3-asm.2/bin 디렉터리의 버전을 사용해야 합니다.

  2. 다음 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
    
  3. 다음 명령어를 실행하여 Anthos Service Mesh를 설치합니다. 지원되는 선택 기능을 사용 설정하려면 다음 명령줄에 -f와 YAML 파일 이름을 포함합니다. 자세한 내용은 선택 기능 사용 설정을 참조하세요.

    bin/istioctl install \
     -f manifests/profiles/asm-multicloud.yaml \
     --set revision=asm-173-6 \
     -f istio-operator-internal-lb.yaml
    

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

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

    kubectl apply -f istiod-service.yaml
    

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

Prometheus 및 Kiali없이 설치

기본적으로 Anthos Service Mesh 1.7 이하에서는 Anthos Service Mesh가 docker.ioquay.io의 원래 패키지 저장소에서 PrometheusKiali를 설치합니다. 이러한 도구를 설치하거나 이러한 저장소에 연결을 허용하지 않으려면 -set addonComponents.prometheus.enabled=false--set addonComponents.kiali.enabled=falseistioctl install에 전달합니다. 예를 들어 다음 명령어를 사용하여 공개 서브넷 설치에서 Prometheus 및 Kiali를 제외합니다.

  bin/istioctl install \
    -f manifests/profiles/asm-multicloud.yaml \
    --set addonComponents.prometheus.enabled=false \
    --set addonComponents.kiali.enabled=false \
    --revision=asm-173-6

제어 영역 구성요소 확인

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 제어 영역 사이의 통신으로 워크로드에 대한 서비스 메시가 생성됩니다.

예시 배포 만들기

이 섹션에서는 샘플 애플리케이션을 설치하고 이에 대해 인그레스 엔드포인트를 만듭니다.

  1. hello-app의 배포를 만들고 배포의 ClusterIP를 만듭니다. 다음 YAML을 hello-app.yaml 파일에 복사합니다.

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      labels:
        app: hello-app
      name: hello-app
    spec:
      selector:
        matchLabels:
          app: hello-app
      replicas: 3
      template:
        metadata:
          labels:
            app: hello-app
        spec:
          containers:
          - name: hello
            image: "gcr.io/google-samples/hello-app:2.0"
    ---
    apiVersion: v1
    kind: Service
    metadata:
      labels:
        app: hello-app
      name: hello-app
    spec:
      type: ClusterIP
      selector:
        app: hello-app
      ports:
      - protocol: TCP
        port: 8080
        targetPort: 8080
    
  2. kubectl apply로 클러스터에 YAML을 적용합니다.

    env HTTPS_PROXY=http://localhost:8118 \
      kubectl apply -f hello-app.yaml
    
  3. 샘플 애플리케이션에 대해 Kubernetes 인그레스를 만듭니다. 다음 YAML을 hello-app-ingress.yaml 파일에 복사합니다.

    apiVersion: networking.k8s.io/v1beta1
    kind: Ingress
    metadata:
      annotations:
        kubernetes.io/ingress.class: istio
      labels:
        app: hello-app
      name: hello-app
    spec:
      rules:
      - host:
        http:
          paths:
          - backend:
              serviceName: hello-app
              servicePort: 8080
    
  4. kubectl apply로 구성을 적용하여 인그레스를 만듭니다.

    env HTTPS_PROXY=http://localhost:8118 \
      kubectl apply -f hello-app-ingress.yaml
    
  5. kubectl get svc로 게이트웨이 상태를 확인합니다.

    env HTTPS_PROXY=http://localhost:8118 \
      kubectl get ingress hello-app
    

    ADDRESS 필드에는 ELB 도메인 이름이 있어야 합니다. ADDRESSpending으로 유지되면 VPC 및 서브넷 라벨 지정을 확인합니다.

  6. 호스트 및 포트를 조합하여 인그레스 게이트웨이 URL을 확인할 수 있습니다. 게이트웨이 URL을 가져오려면 다음 명령어를 실행합니다.

    export INGRESS_URL=$(env HTTPS_PROXY=http://localhost:8118 \
    kubectl get ingress hello-app -o jsonpath='{.status.loadBalancer.ingress[0].hostname}')
    echo "Your hello-app ingress URL is: http://"$INGRESS_URL
    

    마지막 명령어는 인그레스의 엔드포인트를 출력합니다.

  7. 공개 인그레스를 만들었으면 http://$INGRESS_URL/로 이동하여 curl에서 hello-app 기본 웹페이지를 확인할 수 있습니다.

    curl $INGRESS_URL/
    

삭제

kubectl delete를 사용하여 hello-app 구성요소를 삭제합니다.

env HTTPS_PROXY=http://localhost:8118 \
  kubectl delete -f hello-app.yaml &&\
  kubectl delete -f hello-app-ingress.yaml

Anthos Service Mesh를 삭제하려면 Anthos Service Mesh 제거를 참조하세요.

다음 단계

다음에 대해 자세히 알아보기