인프라&운영체제/Istio

[Istio] gateway 사용법

희랍인 조르바 2022. 1. 29. 14:51

istio-ingressgateway는 아래에서 설명할 gateway와는 다른 개념이다.

 

istio-ingressgateway는 Cluster의 entry point가 된다.

 

쿠버네티스에서 nginx ingress controller와 동일하게 ingress controller 역할을 수행한다.

 

로드밸런서 역할을 수행하며 pod로서 동작한다.


istio 공식 사이트에 설명이 잘 나와있긴 하지만, 일단 정리해둔다.

 

istio에서는 gateway virtual service를 통해 트래픽을 컨트롤 한다.

 

virtual service로 패턴에 맞춰 어느 호스트 또는 서비스로 라우팅할지, 트래픽 비중(weight)을 어느정도로 할지 룰을 지정하고, gateway는 단어처럼 어느 호스트의 요청, 포트 등을 처리할지 gateway 역할을 수행한다.

 

virtual service는 자신이 사용할 gateway를 지정하여 사용한다.

gateway는 특별한 케이스가 없다면 기본인 istio-ingressgateway를 사용하면 된다.

 

아래는 gateway, virtual service를 예시.

book-gateway.yaml
apiVersion: networking.istio.io/v1alpha3
kind: Gateway
metadata:
  name: book-gateway
  namespace: book # 원하는 네임스페이스로 지정
spec:
  selector:
    istio: ingressgateway # use istio default controller
  servers:
  - port:
      number: 80
      name: http
      protocol: HTTP
    hosts:
    - "book-store.zorba.com"
  - port:
      number: 443
      name: https
      protocol: HTTPS
    tls:
      mode: SIMPLE # enables HTTPS on this port
      credentialName: zorba-com-credential # fetches certs from Kubernetes secret
    hosts:
    - "book-store.zorba.com"
 
 

해당 명령어로 gateway를 생성.

$ kubectl apply -f book-gateway.yaml

 

확인

$ kubectl get gateway -n book

 

gateway에 대해 더 많은 설정을 보고 싶다면, Click

 

gateway tls 설정방법은 여기를 참고.


아래는 virtual service 예시

book-virtualservice.yaml
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: book-virtualservice
  namespace: book # 원하는 네임스페이스로 지정
spec:
  hosts:
  - "book-storm.zorba.com"
  gateways:
  - book/book-gateway # book 네임 스페이스 밑에 있는 book-gateway를 사용
  http:
    - match:
        - uri:
            prefix: /
      route:
        - destination:
            host: book-store-svc # 라우팅할 서비스
            port:
              number: 80
 

해당 명령어로 virtual service를 생성.

$ kubectl apply -f book-virtualservice.yaml

 

확인

$ kubectl get vs(또는 virtualservice) -n book

virtual service에 대해 더 많은 설정을 보고 싶다면, Click


등록한 호스트를 istio-ingressgateway에서 사용하는 LB의 IP를 연결해주고 curl 요청을 날려보면 확인이 가능하다.

$ curl -v book-store.zorba.com

 

tls를 사용해서 요청방법

$ curl -v book-store.zorba.com --cacert /etc/ssl/cert.pem "https://book-store.zorba.com"