Back

/ 2 min read

ngrok Kubernetes OperatorでAPIのpublic化

自宅サーバーの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/v1
kind: Ingress
metadata:
name: ngrok-ingress
namespace: default
spec:
ingressClassName: ngrok
rules:
- host: <NGROK DOMAIN>
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: <YOUR SERVICE>
port:
number: 80

Ingressとバックエンドのserviceは基本的に同一のnamespaceに所属しておかないと疎通しない部分で少しハマったが無事に公開できた。ExternalNameを使ってmappingすれば異なるnamespaceに存在するserviceでも公開は可能かもしれない。