広島大学ITエンジニア Advent Calendar 2020 23日目の記事になります. @kaitogoでAPIサーバを書いたに続きます!

概要

MagicOnionを使った簡単な(雑な)サービスをKubernetes上にデプロイします. Istioを使ってクライアントがサービスを利用できるところまで持っていきます. 必須ではないもののIstioOperatorを使って好きなポートを 使えるようにします.

Istioについては公式サイトかRedHatが公開しているIntroducing Istio Service Mesh for Microservicesあたりを読んでいくとなんとなく分かると思います.

経緯

投稿しようと思っていた内容がmacOS Big Surで上手く動作しないというトラブルがありました. そこで最近触り始めたIstioについて触れることにしました. 同じく最近触っているMagicOnionを連携させていきます.

Istioだからどうこうということは,ほぼ無いですがサンプルらしいサンプルも無かったので取り上げました.

コード

今回使用したコードは以下に掲載しています.

補足説明

README.mdk8s/sample-appのmanifestを読んでもらえれば何をしているか読み取れるようになっています. 外部からのリクエストがk8sクラスタ内のGatewayを通り,VirtualServiceの内容にしたがってルーティングされ, 目当てのPodに届きます.

唯一気をつける点があるとすれば,istioのmanifestsで定義されているように,標準で用意されているポートが,150218044315443の4つだけである点です.(Istioのバージョンに依存.今回は1.7.0を使用.)

好きなportを使いたい場合はIstioOperatorを使います. 拡張ではなく書き換えなのでコメント されているように,もともと定義されているportも記載しましょう. 今回は123455432を追加したいので以下のように定義します.

---
apiVersion: install.istio.io/v1alpha1
kind: IstioOperator
spec:
  components:
    ingressGateways:
      - name: istio-ingressgateway
        namespace: istio-system
        enabled: true
        k8s:
          service:
            ports:
            # Defaults (https://github.com/istio/istio/blob/1.7.0/manifests/charts/gateways/istio-ingress/values.yaml)
            - port: 15021
              targetPort: 15021
              name: status-port
            - port: 80
              targetPort: 8080
              name: http2
            - port: 443
              targetPort: 8443
              name: https
            - port: 15443
              targetPort: 15443
              name: tls
            # Customs
            - port: 12345
              name: grpc-magiconion
            - port: 5432
              name: http-swagger
# 定義したmanifestを反映する
$ istioctl install -f ./k8s/istio-operator/overlay.yaml

その他

記載内容に間違いなどあればブログにIssueを飛ばしてください. (ブログは2021年内に完成予定...まだタイトルも決まってない...)

最近になったIstioを実プロダクトで使っているなんて話を耳にすることが増えましたが,まだまだカスタムしたコンポーネントを使う必要があったり, α版やβ版のApiが乱立していたりしますね.... ですが物事をシンプルにする学習コストの高い技術が好きなので引き続き追っていきたいと思います. これまたα版ですがHelmを使ったIstioOperator及びIstioの導入もありだと思います. 株式会社GRIPHONEのアドベントカレンダーの記事で分かりやすく解説されています.

はじめクライアントアプリをUnityで作ろうかと思いましたが,依然としてUnityプロジェクトをGitHubなどで共有するのが辛かったため, CUIアプリに変更しました.MagicOnionは,Unity以外でも使うことができます.

今回初めてCakeを使ってビルドを行ってみました. 使い勝手もよく,アドインも豊富なのでC#erにオススメできそうです. まぁ僕はFAKEを使いますが...

今回はNixを意識して使わなかったですが,Kubernetesを触るようなプロジェクト・周辺ツールが乱立しているようなプロジェクトの 開発環境の構築・共有はNixが手軽だなと改めて思いました.