(O+P)ut

アウトプット



(O+P)ut

エンジニアのアウトプット

【Istio/ingressgateway】ClusterIPとVirtualServiceを紐付ける流れ

スポンサーリンク

はじめに

Istioをインストールするとロードバランサとして外部向けのServiceが展開され、そこを経由して各Serviceに割り振ることができます。
今回は自前のIngress経由ではなくistio-systemにできているingressgateway経由してClusterIPへのアクセスを通す流れについて説明します。

環境情報
  • IKS v1.18.13
  • Debian GNU/Linux 9
  • istio-1.8.1

インストール後の状況確認

ロードバランサが以下のように起動していて

$  kubectl get service istio-ingressgateway -n istio-system
NAME                   TYPE           CLUSTER-IP      EXTERNAL-IP     PORT(S)                                                      AGE
istio-ingressgateway   LoadBalancer   XX   YY   80:xx/TCP,443:xx/TCP,xx:xx/TCP  ...

中を見るとlabelにistio: ingressgatewayと記載があります。

apiVersion: v1
kind: Service
...
spec:
  clusterIP: XX
  externalTrafficPolicy: Cluster
  ports:
  - name: status-port
...
  - name: http2
...
  - name: https
    nodePort: ...
    port: 443
    protocol: TCP
    targetPort: 8443
  - name: tls
...
  selector:
    app: istio-ingressgateway
    istio: ingressgateway
  sessionAffinity: None
  type: LoadBalancer
status:
  loadBalancer:
    ingress:
    - ip: YY

GatewayとVirtualServiceを作成

Gatewayとして以下のようにingressgatewayを指定した上で用意した上で

apiVersion: networking.istio.io/v1beta1
kind: Gateway
...
  name: istio-gateway
  namespace: istio-system
 ...
spec:
  selector:
    istio: ingressgateway
  servers:
  - hosts:
    - '*'
    port:
      name: https
      number: 443
      protocol: HTTPS
    tls:
      caCertificates: /etc/istio/ingressgateway-ca-certs/XX
      mode: SIMPLE
      privateKey: /etc/istio/ingressgateway-certs/XX
      serverCertificate: /etc/istio/ingressgateway-certs/XX

そのGatewayの情報とドメイン名とClusterIPを紐付けると

apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: test-vs
  namespace: istio-system
spec:
  hosts:
  - "test.hoge.com"
  gateways:
  - istio-gateway
  http:
  - match:
    - uri:
        prefix: /
    route:
    - destination:
        port:
          number: 5000
        host: testsvc.testns.svc.cluster.local

istio-ingressgatewayの外部IPに向けて上記host名で接続しにいくと指定したServiceに通信が割り振られます。

終わりに

ホスト名とServiceを紐付けるのはIngressが担いますが、Istioの世界ではVirtualServiceが担います。
ちなみに外部からの通信はistio-ingressgatewayのDeploymentに紐づくPodに表示されるのでエラーが出た場合は同Podの調査が必要です。

以上です。