1. 背景
有客户咨询如何在集群外通过kubectl命令行访问 公司平台产品集群(ps. 有特殊端口),正好有同事写过一篇《配置集群外访问某产品集群》,我这边测试后,参考了k8s官网文档《配置对多集群的访问》,2者做了一些结合,于是有此实践文档。
下载kubectl 并保存至 /usr/local/bin, 以下命令在终端中执行
# curl 下载 kubectl ,以下3行 分别是 linux、mac 、windows版本
curl -LO https://storage.googleapis.com/kubernetes-release/release/v1.18.0/bin/linux/amd64/kubectl /usr/local/bin
curl -LO https://storage.googleapis.com/kubernetes-release/release/v1.18.0/bin/darwin/amd64/kubectl /usr/local/bin
curl -LO https://storage.googleapis.com/kubernetes-release/release/v1.18.0/bin/windows/amd64/kubectl.exe
# chmod 更改文件权限
chmod 755 /usr/local/bin/kubectl
vi ~/.kube/config,输入以下内容并保存
apiVersion: v1
clusters:
- cluster:
server: 10.10.*.*:28081
name: hd1
- cluster:
server: 172.16.*.*:48081
name: hl0
- cluster:
server: 10.22.*.*:38081
name: l0
contexts:
- context:
cluster: hd1
user: ""
name: hd1
- context:
cluster: hl0
user: ""
name: hl0
- context:
cluster: l0
user: ""
name: l0
current-context: hd1
kind: Config
preferences: {}
users: []
可以看到,我分别添加了3个集群:
10.10.*.* 网段的产品版本 3.0.8,对应名字为 hd1, 对应上下文相同hd1
172.16.*.* 网段的 产品版本3.1.4,对应名字为 hl0, 对应上下文相同hl0
以及10.22.*.* 网段的 产品版本 4.0.1,对应名字为 l0, 对应上下文相同 l0
在对应的3个机器上分别执行
iptables -t nat -I PREROUTING -d 10.10.*.* -p tcp --dport 28081 -j DNAT --to 127.0.0.1:18081
iptables -t nat -I PREROUTING -d 172.16.*.* -p tcp --dport 48081 -j DNAT --to 127.0.0.1:18081
iptables -t nat -I PREROUTING -d 10.22.*.* -p tcp --dport 38081 -j DNAT --to 127.0.0.1:18081
- iptables -t nat -I OUTPUT -d 10.10.*.* -p tcp --dport 28081 -j DNAT --to 127.0.0.1:18081 命令 备用,
PREROUTING链:作用是在包刚刚到达防火墙时改变它的目的地址
OUTPUT链:改变本地产生的包的目的地址
POSTROUTING链:在包就要离开防火墙之前改变其源地址
kubectl config get-contexts
我们来使用 kubectl 本地直连各种 产品版本 集群看看效果吧
切换集群hd1,简单查看 default下的 pod
kubectl config use-context hd1
kubectl get po -n default
https://kubernetes.io/zh/docs/tasks/access-application-cluster/configure-access-multiple-clusters/
ps,前面写了一个月后,居然一直是草稿未发布状态,今天正好看到一个管理工具 https://github.com/lensapp/lens,这里新增一张图吧,管理起来也挺有意思。
文章评论