自宅サーバーのKubernetesでホスティングしているAPIを外部公開するために、これまではサーバー内でngrokコマンドで公開していたが安定しなかったり、ngrokのプロセスが落ちたときに手で再起動するのが手間だった。 ngrokはKubernetesのサービスを公開するためのOperator(ngrok Kubernetes Operator)を提供してくれていて、こちらに乗り換えることにした。
ngrok Kubernetes Operatorの導入
公式ページに従った手順をもとにスムーズに導入することができた。helmfileに以下のように記載してhelmfile applyする。
repositories:- name: ngrok url: https://charts.ngrok.com
releases:- name: ngrok-ingress-controller chart: ngrok/kubernetes-ingress-controller namespace: ngrok-ingress-controller createNamespace: true set: - name: credentials.apiKey value: "{{ requiredEnv "NGROK_API_KEY" }}" - name: credentials.authtoken value: "{{ requiredEnv "NGROK_AUTHTOKEN" }}"Ingressの作成
Ingressを作成し、APIの公開とバックエンドのserviceに接続する。
apiVersion: networking.k8s.io/v1kind: Ingressmetadata: name: ngrok-ingress namespace: defaultspec: ingressClassName: ngrok rules: - host: <NGROK DOMAIN> http: paths: - path: / pathType: Prefix backend: service: name: <YOUR SERVICE> port: number: 80Ingressとバックエンドのserviceは基本的に同一のnamespaceに所属しておかないと疎通しない部分で少しハマったが無事に公開できた。ExternalNameを使ってmappingすれば異なるnamespaceに存在するserviceでも公開は可能かもしれない。