kubernetesに外部アクセスするときによく使うコマンド

スポンサーリンク

はじめに

kubernetesにpod作って外部からアクセスするときに簡単に確認する方法をまとめておきます。

参考サイト

NodePort vs LoadBalancer vs Ingress

テスト用nginxのmanifest

テスト用に使うのはnginxのdeployment用のmanifest(yamlファイル)。

deploymentにpod作成してもらいます。

元ネタはこちらの公式サイトから。

これだけだとendpointもserviceも出来ません。

この状態で各コマンドを打ちました。

1. port-forwardコマンド

kubectl port-forwardコマンド。--address 0.0.0.0が肝です。

この例はpod指定↓

kubectl port-forward nginx-59f5fd855f-cn46v --address 0.0.0.0 32711:80 &

これなら0.0.0.0にbindされるのでipなんでもいけます=masterのNodeipあてでもいけます。

EC2でこれ打っておいてPCのブラウザから確認できます。アクセスするのはmaster1のpublic ip。もちろんcurl http://localhost:32711もできます。

bind addressについはこちらのサイトを参照。すごくわかりやすい。

私はまずやらないですがdeploment指定でも出来ます。

kubectl port-forward deployment/nginx --address 0.0.0.0 32711:80 &

もともとpodだけだったぽいですね。deploymentのreplicasを複数にしてport-forwardしても特定のpodにしか通信いかずロードバランシングしなかったのでそこだけ注意して使っていこうと思います。

どちらも消すときはjobsでプロセスが動いていること確認してkill %X

ちなみにport-forwardしているときもserviceとendpointは作成されませんでした。

ポートフォワードしているだけだからserviceもendpointもいらないのだろうと思ってます。

エラーが出る場合

socat not foundが表示されたら podが作成されるNodeにsocatがないと言われているのでpodが作成されているNodeで以下を実行すると解決できました。

sudo apt-get update

sudo apt-get install socat

2. NodePort(kind:Service)

port-forward知る前は良く使ってたServiceとしてtype:NodePortを作成する方法です。

例としてはこんな感じのService。

applyするとserviseとendpointが作成されます。

アクセスするにはまずpodが作成されたNodeを知る必要があります。

Node worker1に作成されているのでworker1のPublic IPにアクセスします。ここでは18.179.59.193だったのでhttp://18.179.59.193:32711でアクセスできます。

難点は作るnodeを固定しておかないと作成させるnodeが変わること。

3. kubectl expose

コマンドによるけど↑のNodePort作成するのと同じことができます。
が、Nodeport(ポート番号のやつ)を指定できない? -hでオプション見ても見当たらなかった。

2に近いところのコマンドだとこんな感じ。

kubectl expose pod nginx-59f5fd855f-cn46v --type=NodePort --port=80 --target-port=80

NodePortは31809になっているのでhttp://18.179.59.193:32188にアクセスすることになります。

消すコマンドなさそうなのでkubectl delete services nginx-59f5fd855f-cn46vあたりが妥当なんですかね。endpointも消えてくれるし。でもこれ使うならyaml書いた方が個人的には楽ちん。

deployment指定もできます。

kubectl expose deployment nginx --type=NodePort --port=80 --target-port=80

以下勘違いしてた似てるけど違うコマンド

kubectl proxy

kube-apiserverとの仲介であってnginxのpod作って外からアクセスするのに使うとか関係ない様子。※Run a proxy to the Kubernetes API server.

詳しいサイト

最後に

これらは一時的な確認用です。本番稼働、サービスとしてちゃんと動かすならingressなのかな。

関連コンテンツ



シェアする

  • このエントリーをはてなブックマークに追加

フォローする