Istio 1.5.0 のインストールをカスタマイズしてみる

昨日の続き:

bufferings.hatenablog.com

昨日はデフォルトプロファイルでインストールしたので、今日はちょっとカスタマイズしてみたい。

## カスタマイズの方法

これかな:

https://istio.io/docs/setup/install/istioctl/#customizing-the-configuration

### プロファイル

プロファイルはistioctlに組み込まれてるんだけど、それと同じものがインストーラーのinstall/kubernetes/operator/profilesにあるっぽい。それを見たらどんな設定を変更したらいいか分かりそう:

ls -1 install/kubernetes/operator/profiles
default.yaml
demo.yaml
empty.yaml
minimal.yaml
remote.yaml
separate.yaml

Github上はこれかな https://github.com/istio/istio/tree/1.5.0/operator/data/profiles

### 設定の変更方法

で、その設定を次のようにして--setオプションで変更できる:

❯ istioctl manifest apply --set components.telemetry.enabled=false

毎回オプションで指定するのも面倒だなぁと思ってたらやっぱりYAMLで設定できるよねぇ。インストーラーのsamples/operatorにサンプルがある 。

ls -1 samples/operator
default-install.yaml
pilot-advanced-override.yaml
pilot-k8s.yaml
sds-policy-off.yaml
sds.yaml
trafficManagement-namespace.yaml
values-global.yaml
values-pilot.yaml

Github上はこれだな https://github.com/istio/istio/blob/1.5.0/operator/samples

んで、作った設定ファイルをこんな風にして指定できる:

❯ istioctl manifest apply -f bufferings.yaml

マニフェストの適用だけじゃなくて生成もできるのか。それもいいな:

❯ istioctl manifest generate -f bufferings.yaml

なるほど。じゃ、やってみるか。

## 設定ファイルの作成

設定で触りたい主な部分は:

  • kialiを有効にしてみようかな
  • istio-ingressgatewayLoadBalancer じゃなくて NodePort にしてみる
  • Auto mTLSがデフォルトONになったみたいだけど、なんとなくOFFにしてみる
  • outboundTrafficPolicyREGISTRY_ONLY にしてみる

それくらいかな。とか考えながら、ごにょごにょごにょごにょやってみて最終的に bufferings.yaml をこんな感じにしてみた:

apiVersion: install.istio.io/v1alpha1
kind: IstioOperator
spec:
  # defaultをベースに
  profile: default

  addonComponents:
    # kialiを有効化する
    kiali:
      enabled: true

  values:
    global:
      # Auto mTLSをオフに
      mtls:
        auto: false
      # 外部へのアクセスは制限する
      outboundTrafficPolicy:
        mode: REGISTRY_ONLY
    gateways:
      # NodePortにする
      istio-ingressgateway:
        type: NodePort
        ports:
          - port: 15020
            targetPort: 15020
            name: status-port
          - port: 80
            targetPort: 80
            nodePort: 31380
            name: http2
          - port: 443
            name: https
            nodePort: 31390
    kiali:
      # テストなのでログインなしにする
      dashboard:
        auth:
          strategy: anonymous

なるほど。Helmよりこっちの方がインストールの設定を管理しやすいな。

## インストール

ということでapply:

❯ istioctl manifest apply -f bufferings.yaml
proto: tag has too few fields: "-"
- Applying manifest for component Base...
✔ Finished applying manifest for component Base.
- Applying manifest for component Pilot...
✔ Finished applying manifest for component Pilot.
- Applying manifest for component IngressGateways...
- Applying manifest for component AddonComponents...
✔ Finished applying manifest for component AddonComponents.
✔ Finished applying manifest for component IngressGateways.


✔ Installation complete

んで、Bookinfoを昨日と同じようにインストールしてみた。

# istio-proxyの自動設定を有効にして
❯ kubectl label namespace default istio-injection=enabled
namespace/default labeled

# アプリケーション群をデプロイ
❯ kubectl apply -f samples/bookinfo/platform/kube/bookinfo.yaml
service/details created
serviceaccount/bookinfo-details created
...

# ゲートウェイをデプロイ
❯ kubectl apply -f samples/bookinfo/networking/bookinfo-gateway.yaml
gateway.networking.istio.io/bookinfo-gateway created
virtualservice.networking.istio.io/bookinfo created

簡単にチェックしてみよう。

### Kiali

お。デプロイされてる。ポートフォワードしてチェック:

❯ kubectl port-forward -n istio-system svc/kiali 8000:20001

f:id:bufferings:20200309222131p:plain

### NodePort

ちゃんとLoadBalancerじゃなくてNodePortサービスになってる:

❯ kubectl get svc -n istio-system istio-ingressgateway
NAME                   TYPE       CLUSTER-IP   EXTERNAL-IP   PORT(S)                                      AGE
istio-ingressgateway   NodePort   10.0.5.146   <none>        15020:31147/TCP,80:31380/TCP,443:31390/TCP   2m49s

ポートも指定したものになってる。

### Auto mTLS

は、Kialiで確認したらOFFになってる:

f:id:bufferings:20200309222500p:plain

ちなみにONだとこんな感じ。鍵マークがついてる:

f:id:bufferings:20200309221419p:plain

### outboundTrafficPolicy

も有効になってるみたいだね:

❯ k exec -ti deployment/ratings-v1 bash
Defaulting container name to ratings.
Use 'kubectl describe pod/ratings-v1-f745cf57b-fhd7v -n default' to see all of the containers in this pod.
root@ratings-v1-f745cf57b-fhd7v:/opt/microservices# curl -I google.com
HTTP/1.1 502 Bad Gateway
date: Mon, 09 Mar 2020 13:34:29 GMT
server: envoy
transfer-encoding: chunked

面白かった。

次は

GKEなので、PrometheusじゃなくてStackdriverにログを送りたいな。