kubectl 连接远程开发环境
- 第一种方式:通过修改 kubeconfig 文件,来连接远程环境。
在远端的 k8s 集群上面,如果直接把/etc/kubernetes/admin.conf
拷备到本地,有时不能用。比如:一个 all-in-one 环境,给它绑定 eip(外部绑定),它的 admin.conf 中的 cluster的 ip 通常是内网 IP。如果改成 eip 后,会提示 x509 错误。这个时候需要把 caData 去掉,并加上 insecure-skip-tls-verify: true
。如:
apiVersion: v1
clusters:
- cluster:
server: https://ss:6443 #这里 ss 是我的远端服务器,配置在/etc/hosts 中
insecure-skip-tls-verify: true #需要加上这个跳过证书认证
name: cluster.local
contexts:
- context:
cluster: cluster.local
user: kubernetes-admin
...
- 第二种方式:通过加代理的方式,但是在远程 debug 的时候,会有点问题。
在远端服务器上搭建正向代理:
ncat -l --proxy-type http localhost 81
在本地配置 http proxy:
export http_proxy="http://ss:81"; export https_proxy="http://ss:81"; # ss 配置在/etc/hosts,是远端的服务器 IP
然后把远端的配置文件拷备过来就可以直接用。
-
第三种方式:通过 vpn,这个配置 vpn 复杂点,但是可以直接用
kubeconfig
文件,调试也很直接。 -
最佳、最简单的一种:真是体验前面的各种酸爽,终于茅塞顿开,感谢同事 csw.
直接把远程的 config 文件拷备到本地,远程的 config 文件里面的 cluster 需要配置成域名的形式,然后访问的时候,以域名的形式来访问,配置将远程的 eip 配置在 host 里面,跟这个域名对应。 看着很简单是不是?原先的坑在哪?
原先的 k8s 上的 config 文件是 ip 的形式,而这个 Ip 是主机的内网 IP,而不是 EIP,它的证书有校验,只允许特定的一些 IP,加域名才能通过校验。因此,当本地以 IP 来访问的就时候就报 x504 证书校验失败。
那么如果是一个集群呢,在一个 vpc 内部,vpc 有 eip,到下面主机的都是以端口转发的形式来访问的。这个时候要如何配置呢?
还是配置 hosts,不过在 vpc router 上面要加个这个配置文件里面定义的端口转发,6443.
原先一直以为反是以域名访问的,都以 ip 来访问,这个观念是错的,比如这里就不行,以域名的形式访问,后端收到请求后,会设置 Host,当有证书或是流量规则时,就不一样。原因是请求体不一样,即 Header 不一样。***
环境配置
- centos环境初始化
curl https://raw.githubusercontent.com/zackzhangkai/scripts/master/k8sInstallPre.sh | bash
- 安装完k8s后,安装一些基本工具
bash:
curl https://raw.githubusercontent.com/zackzhangkai/scripts/master/k8sInstallPost.sh | bash
zsh
curl https://raw.githubusercontent.com/zackzhangkai/scripts/master/k8sInstallPost.sh > k8sInstallPost.sh && sh k8sInstallPost.sh zsh
zsh如果报 无法找到 comman_shell 的错,如:
root@ks-allinone:/root/istio-1.4.8/install/kubernetes/helm # k get h__start_kubectl:6: command not found: _init_completion
执行:
autoload -U +X compinit && compinit source <(kubectl completion zsh)
如果配置没有生效,重开shell
telepresence
telepresence 的作用是把 K8s cluster 的网络跟本地连接起来。
telepresence --namespace kubesphere-system --also-proxy openldap.kubesphere-system.svc.cluster.local