Kubernetes in Docker 存取服務 - Linux

Table of Contents

我最近在研究 VMWare Tanzu Community Edition,
在 Ubuntu 裝好後發現它是基於 Kubernetes in Docker,
它會新增一個 docker bridge network - kind (如 subnet: 172.20.0.0/16),
且 host 有一個新的 brXYZ interface (IP: 172.20.0.1)。

我用 kubectl apply 啟動 nginx,
再使用 kubectl expose --type NodePort --port 80 (部分指令)
新增1個 k8s service,假設 node port = 33333。

但我發現我無法在 host 使用
curl localhost:33333 或 curl public_ip:33333
存取該 service。
我只能透過 k8s control plane container (如 IP: 172.20.0.4) 存取:
curl 172.20.0.4:33333
也就是只能透過上述 brXYZ interface 存取 k8s service。

實際上我想做到的是外部使用者能透過 public IP + port 33333 存取 k8s service,
但查不到相關文件對 k8s in Docker 的標準作法。
我有看過使用 iptables 的解法,但覺得這種作法只適用 Linux host,
不適用 macOS host。所以想請問有沒有更通用的作法?

--

All Comments

Jacob avatarJacob2021-11-02
試試k3s或rke2 + rancher
Andy avatarAndy2021-11-03
ubuntu要不要試lxd?https://stgraber.org/2017/01/13/kubernetes-inside-lxd/
Yuri avatarYuri2021-11-04
但這文件是lxd v2的,現在已經進展到v4了
Lily avatarLily2021-11-05
1xd可以用proxy來轉發埠通訊 4.18也有network forwards可用
Jacob avatarJacob2021-11-06
我之前有和你類似狀況 後來是在ubuntu架一個nginx proxy導過去
Rae avatarRae2021-11-06
但你k8s那邊要弄個service ymal寫好 target port 這樣才不會依賴node port