はじめに
こんにちは!新卒1年目のTKDSです!
今回はkindで任意のポートをローカルマシンのポートにマッピングする方法を紹介します.
実際にkindでclusterを作成して動作確認をしながら進めます.
kindとは
コンテナを使用して,kubernetesクラスターを構築できるものです.
githubのAboutには
About
Kubernetes IN Docker - local clusters for testing Kubernetes
と書いてあるので,kindはKubernetes IN Docker
の略のようです.
先に結論から言うと,clusterの作成時に設定ファイルでポートを指定します.
では,clusterの作成・Kubernetesリソースの作成・動作確認・kindの設定し直しの順で行っていきます.
default 設定でのCluster構築
まずはdefault設定でClusterを構築し,curlで通信してみます.
Cluster作成
$ kind create cluster
defaultの設定で,kindという名前のclusterが作成されます.
作成されたclusterを確認してみましょう.
$ kind get clusters kind
deploymentとNodePortの作成
このdeploymentの内容はkubernetesのドキュメントにあるものを使用しています.
- deploymentの作成
apiVersion: apps/v1 kind: Deployment metadata: name: nginx-deployment spec: selector: matchLabels: app: nginx replicas: 2 template: metadata: labels: app: nginx spec: containers: - name: nginx image: nginx:1.14.2 ports: - containerPort: 80
- NodePortの作成
apiVersion: v1 kind: Service metadata: name: nginx-service spec: type: NodePort selector: app: nginx ports: - protocol: TCP port: 80 nodePort: 30007
リソースを作成します.
deploymentとpodの状態を確認します.
deploymentとdeploymentで指定していたpodがreplicasの数で起動しているのが確認できました.
次にNodePortの確認をします.
NodePortが作成されていることが確認できます.
- マッピングされているポートの確認
NodePortでportを設定したので,アクセスしてみます.
cluster-ipとそのポートを指定・localhostとNodePortの指定,どちらを行ってもnginxにはアクセスできません.
これは,nodePortで指定しているportがローカルマシンのportにマッピングされていないためです.
冒頭でも述べたようにkindで作るclusterはコンテナなので,コンテナのポートをローカルマシンにマッピングしなければなりません.
まずは,稼働してるclusterについて見てみます.
docker psでコンテナを確認することができます.
PORTSの項で,ローカルのポートにコンテナのポートがマッピングされているのが確認できます.
ここでは,NodePortで指定してる30007番のPortがマッピングされていないのがわかります.
そのため,ローカルマシンからコンテナ内のnodePortにアクセスができなくなっています.
では,yamlに書いたPortでアクセスできるようにしていきます.
kindの設定ファイルの作成
kindはcluster作成時に設定を書いたyamlファイルを指定することができます.
まずは設定ファイルを作成しましょう.
- 設定ファイルからcluster作成 kindのフラグについて調べます
$ kind create cluster --help
出力
Creates a local Kubernetes cluster using Docker container 'nodes' Usage: kind create cluster [flags] Flags: --config string path to a kind config file -h, --help help for cluster --image string node docker image to use for booting the cluster --kubeconfig string sets kubeconfig path instead of $KUBECONFIG or $HOME/.kube/config -n, --name string cluster name, overrides KIND_CLUSTER_NAME, config (default kind) --retain retain nodes for debugging when cluster creation fails --wait duration wait for control plane node to be ready (default 0s) Global Flags: --loglevel string DEPRECATED: see -v instead -q, --quiet silence all stderr output -v, --verbosity int32 info log verbosity, higher value produces more output
--config string path to a kind config file
と書いてあります.
まず設定ファイルを作成します.
kindの設定ファイルについては,ドキュメントのConfigurationに記述があります.
設定ファイルでkind上のコンテナのポート番号をcontainerPort
に書き,hostPortにローカルマシンのポートを指定します.
設定ファイルは下記の通りです.
kind: Cluster apiVersion: kind.x-k8s.io/v1alpha4 nodes: - role: control-plane extraPortMappings: - containerPort: 30007 hostPort: 30007 listenAddress: 127.0.0.1 - role: worker
では,設定ファイルを使って,clusterを作成しましょう.
$ kind create cluster --config my-cluster.yaml
- docker psでマウントされているポートを見る
$ docker ps
ローカルマシンのポートにコンテナのポートがマッピングされているのが確認できました.
設定したポートにアクセスする
もう一度,deploymentとserviceの作成をしておいてください. では,アクセスしてみましょう.
無事レスポンスを確認することができました.
まとめ
今回は,kindでのport設定を紹介し,実際にレスポンスを確認するところまで行いました.
ここまで見ていただきありがとうございました!