🐙

GitHub CodespacesでKubernetesを動かす(kindでingress-nginx)

2023/02/27に公開

最近、コーディング中のラップトップのパフォーマンスが気になるので、GitHub Codespaces を触ってみます。

https://docs.github.com/ja/codespaces/overview

今回は、ローカルで Kubernetes クラスタを実行できる kind で ingress-nginx を動かしてみます。

https://kind.sigs.k8s.io/

devcontainer の設定

Docker と kubectl は下記 feature で導入します

https://github.com/devcontainers/templates/tree/main/src/kubernetes-helm-minikube

前述の feature で minikube が導入できたのですが、今回使いたいのは kind です。

自分で feature を作ろうかとも思ったのですが、先人が用意してくれていたのでありがたく使わせていただきます 😻

https://github.com/mpriscella/features/tree/main/src/kind

devcontainer.json
{
	"name": "Kubernetes with kind",
	"image": "mcr.microsoft.com/devcontainers/base:bullseye",
	"features": {
		"ghcr.io/devcontainers/features/docker-in-docker:2": {
			"enableNonRootDocker": "true",
			"moby": "true"
		},
		// For kubectl
		"ghcr.io/devcontainers/features/kubectl-helm-minikube:1": {
			"version": "latest",
			"helm": "latest",
			"minikube": "latest"
		},
		"ghcr.io/mpriscella/features/kind:1": {
			"version": "latest"
		}
	}
}

Codespaces を立ち上げます!

kind で ingress-nginx を動かしてみる

kind のチュートリアルに沿って進めます。

https://kind.sigs.k8s.io/docs/user/ingress/#ingress-nginx

# クラスタを作成
cat <<EOF | kind create cluster --config=-
kind: Cluster
apiVersion: kind.x-k8s.io/v1alpha4
nodes:
- role: control-plane
  kubeadmConfigPatches:
  - |
    kind: InitConfiguration
    nodeRegistration:
      kubeletExtraArgs:
        node-labels: "ingress-ready=true"
  extraPortMappings:
  - containerPort: 80
    hostPort: 80
    protocol: TCP
  - containerPort: 443
    hostPort: 443
    protocol: TCP
EOF

# ingress-nginxを導入
kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/main/deploy/static/provider/kind/deploy.yaml

# ingress-nginxがreadyになるまで待機
kubectl wait --namespace ingress-nginx \
  --for=condition=ready pod \
  --selector=app.kubernetes.io/component=controller \
  --timeout=90s

# サンプルコンテンツを作成
kubectl apply -f https://kind.sigs.k8s.io/examples/ingress/usage.yaml

ingress-nginx が動作していることを確かめます

curl localhost/foo/hostname
curl localhost/bar/hostname

無事動いているようです 🎉

ポートパネルからポート番号 80 のローカルアドレスを選択し、ブラウザでも開いてみます。

ルートは 404 ですが、

/foo/hostname には無事アクセスできました!

Discussion