minikubeへのアクセス設定

minikube上のサービスにホストからアクセスするには、まずポートをnode(実機、ここではminikube VM)に割り当てる設定が必要です。

nginxのhttps / http のポートをNodePortに設定するServiceのコンフィグ例は以下の通りです。

apiVersion: v1
kind: Service
metadata:
  labels:
    name: nginx
  name: nginx
spec:
  ports:
    - name: https
      port: 443
      nodePort: 30443
      targetPort: https
      protocol: TCP
    - name: http
      port: 80
      nodePort: 30080
      targetPort: http
      protocol: TCP
  selector:
    name: nginx
  type: NodePort

nodePortが外側からアクセス可能なポート番号です。kubernetesのデフォルトのNodePortの範囲は30000-32767のため、この範囲で指定します。

minikubeの起動オプションにIP範囲を変更するものもありますが、v0.27のhyperkit環境では、指定すると起動しなくなります。

なお、minikube VMのIPはminikube ipで確認でき、例として https://192.168.64.11:30443/ のようなアドレスでブラウザからアクセスできます。

Webフレームワークにホスト名を伝達する設定

Webフレームワークを利用している場合、ポート付きのアドレスで認識できないと、リダイレクト処理などのケースでポート無しアドレスに転送される挙動になります。nginxなどのプロキシで以下のようにHTTPヘッダーを設定するとポート付きのホストとして認識できるケースがあります。

    proxy_set_header X-Forwarded-Host $host:30080

この例ではポート番号をハードコードしていますが、 $server_port でポート番号を取得できます。ただし、Podの内部IPとNodePortのIP番号が異なる場合、$server_port の値がNodePortを指さないケースもあるため、最悪はこのようにハードコードすることで対処できます。

中馬崇尋
Chuma Takahiro