Ingress를 통한 백엔드 서비스 구성

이 페이지에서는 Kubernetes Ingress 객체를 사용하여 Google Cloud Platform 백엔드 서비스의 특정 속성을 구성하는 방법을 보여줍니다.

개요

GKE 클러스터에서 Kubernetes Ingress 객체를 만들면 GKE ingress 컨트롤러가 활성화되고 Google Cloud Platform HTTP(S) 부하 분산기를 만듭니다. ingress 컨트롤러는 부하 분산기를 구성하고, 부하 분산기와 연관된 하나 이상의 백엔드 서비스도 구성합니다.

GKE 버전 1.11.3-gke.18부터 Ingress를 사용하여 다음과 같은 백엔드 서비스 속성을 구성할 수 있습니다.

백엔드 서비스의 구성 정보는 BackendConfig라는 커스텀 리소스에 보관됩니다.

백엔드 서비스의 속성을 구성하려면 다음을 수행하세요.

  1. BackendConfig를 만듭니다.
  2. 서비스를 만들고 포트 중 하나를 BackendConfig와 연결합니다.
  3. Ingress를 만들고 이를 (서비스, 포트) 쌍과 연결합니다.

시작하기 전에

이 작업을 준비하려면 다음 단계를 수행하세요.

  • Google Kubernetes Engine API가 사용 설정되었는지 확인합니다.
  • Google Kubernetes Engine API 사용 설정
  • Cloud SDK가 설치되었는지 확인합니다.
  • 기본 프로젝트 ID를 설정합니다.
    gcloud config set project [PROJECT_ID]
  • 영역 클러스터를 사용하는 경우 기본 컴퓨팅 영역을 설정합니다.
    gcloud config set compute/zone [COMPUTE_ZONE]
  • 지역 클러스터를 사용하는 경우 기본 컴퓨팅 지역을 설정합니다.
    gcloud config set compute/region [COMPUTE_REGION]
  • gcloud를 최신 버전으로 업데이트합니다.
    gcloud components update

배포 만들기

BackendConfig 및 서비스를 만들기 전에 배포를 만들어야 합니다. 배포 매니페스트는 다음과 같습니다.

apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-bsc-deployment
spec:
  selector:
    matchLabels:
      purpose: bsc-config-demo
  replicas: 2
  template:
    metadata:
      labels:
        purpose: bsc-config-demo
    spec:
      containers:
      - name: hello-app-container
        image: gcr.io/google-samples/hello-app:1.0

이름이 my-bsc-deployment.yaml인 파일에 매니페스트를 복사하고 배포를 만듭니다.

kubectl apply -f my-bsc-deployment.yaml

BackendConfig 만들기

BackendConfig의 매니페스트는 다음과 같습니다. 매니페스트는 다음을 지정합니다.

apiVersion: cloud.google.com/v1beta1
kind: BackendConfig
metadata:
  name: my-bsc-backendconfig
spec:
  timeoutSec: 40
  connectionDraining:
    drainingTimeoutSec: 60
  sessionAffinity:
    affinityType: "GENERATED_COOKIE"
    affinityCookieTtlSec: 50

이름이 my-bsc-backendconfig.yaml인 파일에 매니페스트를 복사하고 BackendConfig를 만듭니다.

kubectl apply -f my-bsc-backendconfig.yaml

서비스 만들기

서비스의 매니페스트는 다음과 같습니다.

apiVersion: v1
kind: Service
metadata:
  name: my-bsc-service
  labels:
    purpose: bsc-config-demo
  annotations:
    beta.cloud.google.com/backend-config: '{"ports": {"80":"my-bsc-backendconfig"}}'
spec:
  type: NodePort
  selector:
    purpose: bsc-config-demo
  ports:
  - port: 80
    protocol: TCP
    targetPort: 8080

이 연습에서는 서비스 관련 정보를 기록하는 것이 중요합니다.

  • purpose: bsc-config-demo 라벨을 포함하는 모든 포드가 서비스의 구성원입니다.

  • 서비스의 포트 80이 my-bsc-backendconfig라는 BackendConfig와 연결됩니다. beta.cloud.google.com/backend-config 주석에 이 항목이 지정되어 있습니다.

  • 서비스의 포트 80에 전송된 요청은 포트 8080에서 구성원 포드 중 하나로 전달됩니다.

이름이 my-bsc-service.yaml인 파일로 매니페스트를 저장하고 서비스를 만듭니다.

kubectl apply -f my-bsc-service.yaml

Ingress 만들기

Ingress의 매니페스트는 다음과 같습니다.

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: my-bsc-ingress
spec:
  rules:
  - http:
      paths:
      - path: /*
        backend:
          serviceName: my-bsc-service
          servicePort: 80

매니페스트에서, 들어오는 요청이 my-bsc-service라는 서비스의 포트 80으로 라우팅되는 것을 볼 수 있습니다.

이름이 my-bsc-ingress.yaml인 파일에 매니페스트를 복사하고 Ingress를 만듭니다.

kubectl apply -f my-bsc-ingress.yaml

ingress 컨트롤러가 HTTP(S) 부하 분산기 및 연결된 백엔드 서비스를 구성할 때까지 몇 분 정도 기다립니다.

백엔드 서비스 보기

서비스를 확인합니다.

kubectl get service my-bsc-service

출력에 표시되는 노드 포트 값을 메모합니다. 예를 들어 다음 출력에서 노드 포트 값은 30936입니다.

NAME             TYPE       CLUSTER-IP     EXTERNAL-IP   PORT(S)        AGE
my-bsc-service   NodePort   10.83.15.111   none          80:30936/TCP   2m

GCP 프로젝트에 있는 백엔드 서비스를 나열합니다.

gcloud compute backend-services list

출력에서 이 백엔드 서비스의 이름을 찾습니다. 서비스의 노드 포트를 포함하고 있는 이름입니다. 예를 들어 노드 포트가 30936인 경우 백엔드 서비스의 이름은 다음과 유사합니다.

NAME
...
k8s-be-30936--078bc860bb6f7a2f
...

백엔드 서비스를 설명합니다.

gcloud compute backend-services describe [BACKEND_SERVICE_NAME] --global

여기서 [BACKEND_SERVICE_NAME]은 백엔드 서비스의 이름입니다.

구성된 속성의 값이 출력에 표시됩니다.

affinityCookieTtlSec: 50
...
connectionDraining:
  drainingTimeoutSec: 60
...
sessionAffinity: GENERATED_COOKIE
...
timeoutSec: 40

클라이언트 IP 어피니티 설정

앞선 연습에서는 쿠키 기반 어피니티를 구성했습니다. BackendConfig를 사용하여 클라이언트 IP 어피니티를 설정할 수도 있습니다.

클라이언트 IP 어피니티는 네트워크 엔드포인트 그룹의 지원을 받는 서비스에만 유용합니다.

클라이언트 IP 어피니티를 설정하려면 BackendConfig 매니페스트에서 affinityType을 'CLIENT_IP'로 설정하세요.

sessionAffinity:
  affinityType: "CLIENT_IP"

클라이언트 IP 어피니티의 경우, affinityCookieTtlSec 필드는 관련이 없습니다.

서비스 매니페스트에 cloud.google.com/neg: '{"ingress": true}' 주석을 포함합니다.

kind: Service
metadata:
  name: my-bsc-service
  labels:
    purpose: bsc-config-demo
  annotations:
    cloud.google.com/neg: '{"ingress": true}'
    beta.cloud.google.com/backend-config: '{"ports": {"80":"my-bsc-backendconfig"}}'
...

삭제

이 페이지의 연습을 완료한 후에는 다음 단계에 따라 자신의 계정에 원치 않는 비용이 발생하지 않도록 리소스를 삭제합니다.

이 연습을 위해 만든 Kubernetes 객체를 삭제합니다.

kubectl delete ingress my-bsc-ingress
kubectl delete service my-bsc-service
kubectl delete backendconfig my-bsc-backendconfig
kubectl delete deployment my-bsc-deployment

다음 단계

이 페이지가 도움이 되었나요? 평가를 부탁드립니다.

다음에 대한 의견 보내기...

Kubernetes Engine