需求
開發需要在 K8S 集群上部署 mongodb 集群且需要使用 NodePort 把地址和端口公布出來訪問。經檢查 K8S 集群有一個節點上配有公網IP。這樣一來外網也可以直接通過公網IP和端口連接上 mongodb 集群,十分不安全。
方案
方案一: 開啟 firewalld,原來服務器沒有開啟且跑了很多服務,開啟后不知道是否會沖突,備用方案
方案二: 關閉服務器上的公網網卡,服務器上跑了很多服務器,作用不詳。。。
方案三: 使該服務器上 kube-proxy 綁定內網IP,公網無法訪問。影響最小,優先選擇
修改 kube-proxy 配置
# 找到 kube-proxy 服務配置
cd /usr/lib/systemd/system
cat kube-proxy.service
[Unit]
Description=Kubernetes Kube-Proxy Server
Documentation=https://github.com/GoogleCloudPlatform/kubernetes
After=network.target
[Service]
WorkingDirectory=/var/lib/kube-proxy
ExecStart=/usr/local/sbin/kube-proxy \
--config=/etc/kubernetes/kube-proxy.config.yaml \
--alsologtostderr=true \
--logtostderr=false \
--log-dir=/var/log/kubernetes \
--ipvs-scheduler=rr \
--ipvs-min-sync-period=5s \
--ipvs-sync-period=5s \
--masquerade-all=true \
--conntrack-tcp-timeout-close-wait=5m \
--v=3
Restart=on-failure
RestartSec=5
LimitNOFILE=65536
[Install]
WantedBy=multi-user.target
# 確認配置文件是 /etc/kubernetes/kube-proxy.config.yaml
# 備份修改
cp /etc/kubernetes/kube-proxy.config.yaml /etc/kubernetes/kube-proxy.config.yaml.20211108
vi /etc/kubernetes/kube-proxy.config.yaml
# 在最后添加
nodePortAddresses: ["192.168.1.0/24"]
# 重啟 kube-proxy
systemctl restart kube-proxy
檢查
在該節點上使用 netstat -tulnp 命令查看是否監聽在內網地址
使用 telnet 命令進行測試
參考:https://kubernetes.io/docs/concepts/services-networking/service/#nodeport