GKE에서 Envoy 사이드카 서비스 메시 설정
이 페이지에서는 GKE에서 Envoy 사이드카 서비스 메시를 설정하는 방법을 설명합니다.
기본 요건
이 가이드에서는 사용자가 다음 요건을 이미 충족한다고 가정합니다.
- GKE 클러스터를 만들어 Fleet에 등록했습니다.
- 커스텀 리소스 정의를 설치했습니다.
서비스 설정
샘플 HTTP 서비스를 만듭니다.
kubectl apply -f - <<EOF kind: Namespace apiVersion: v1 metadata: name: sidecar-example --- apiVersion: apps/v1 kind: Deployment metadata: name: whereami namespace: sidecar-example spec: replicas: 2 selector: matchLabels: app: whereami template: metadata: labels: app: whereami spec: containers: - name: whereami image: gcr.io/google-samples/whereami:v1.2.20 ports: - containerPort: 8080 --- apiVersion: v1 kind: Service metadata: name: whereami namespace: sidecar-example spec: selector: app: whereami ports: - port: 8080 targetPort: 8080 EOF
서비스의 기준 HTTPRoute를 만듭니다.
apiVersion: gateway.networking.k8s.io/v1beta1 kind: HTTPRoute metadata: name: whereami-route namespace: sidecar-example spec: parentRefs: - name: whereami kind: Service group: "" rules: - backendRefs: - name: whereami port: 8080 EOF
또한 다음 매니페스트는 샘플 gRPC 서비스를 설명합니다.
apiVersion: v1 kind: Service metadata: name: sample-service namespace: sample-ns annotations: networking.gke.io/app-protocols: '{"50051": "HTTP2"}' # 50051 is backendref.port spec: ports: - port: 50051 targetPort: 50051
클라이언트 설정
클라이언트를 만듭니다.
kubectl apply -f - <<EOF apiVersion: apps/v1 kind: Deployment metadata: labels: run: client name: client namespace: sidecar-example spec: replicas: 1 selector: matchLabels: run: client template: metadata: labels: run: client spec: containers: - name: client image: curlimages/curl command: - sh - -c - while true; do sleep 1; done EOF
클라이언트 포드에 Envoy 사이드카 컨테이너가 자동으로 삽입되는지 확인합니다.
kubectl get pods -n sidecar-example -l run=client
출력은 다음과 비슷합니다.
NAME READY STATUS RESTARTS AGE client-xxxx 2/2 Running 0 20s
클라이언트가 준비되고 실행 중
Status
가 될 때까지 기다렸다가 계속 진행합니다.Envoy-사이드카 서비스 메시 설정을 확인합니다. 다음 명령어는 클라이언트에서 whereami 서비스에 요청을 전송합니다.
CLIENT_POD=$(kubectl get pod -n sidecar-example -l run=client -o=jsonpath='{.items[0].metadata.name}') # The VIP where the following request will be sent. Because all requests # from the client container are redirected to the Envoy proxy sidecar, you # can use any IP address, including 10.0.0.2, 192.168.0.1, and others. VIP='10.0.0.1' TEST_CMD="curl -v -H 'host: whereami.sidecar-example.svc.cluster.local' $VIP" kubectl exec -it $CLIENT_POD -n sidecar-example -c client -- /bin/sh -c "$TEST_CMD"
출력은 다음과 비슷합니다.
< Trying 10.0.0.1:80... < Connected to 10.0.0.1 (10.0.0.1) port 80 (#0) < GET / HTTP/1.1 < Host: whereami < User-Agent: curl/7.82.0-DEV < Accept: */* < < Mark bundle as not supporting multiuse < HTTP/1.1 200 OK < content-type: application/json < content-length: 318 < access-control-allow-origin: * < server: envoy < date: Tue, 12 Apr 2022 22:30:13 GMT < { "cluster_name": "${CLUSTER_NAME}", "location": "${LOCATION}", "host_header": "whereami", ... }