非缺省域名下 Istio 的使用

Kubernetes 缺省的域名为 cluster.local,好死不死的,istio 的缺省安装也沿用了这一设定, 并且文档中并没有明确指出这一假设。Istio 中使用了大量的 FQDN 进行服务的甄别,域名不一致这样 的问题可以说是后患无穷。经过 101 号 issue 的讨论,得知 proxy 和 pilot 组件提供了域名的设置功能, 大致用法如下:

Pilot

kubectl edit deploy istio-pilot -n istio-system 或者编辑官方的 istio.yaml,查找 docker.io/istio/pilot:0.2.9 的容器,并在 args 一节中加入如下的两行:

- --domain
- cloud.ctrm

Proxy

这部分略讨厌,因为每个业务 Pod 中都会有 SideCar 加载,因此只能逐个修改,方法同样有两个, 一个是使用 kubectl edit deploy [workload-deployment] 的方式,另外一个就是,保存 istioctl kube-inject -f [workload.yaml] 输出的文本。同样在 docker.io/istio/proxy_debug:0.2.9 所在容器的 args 一节中加入下面的参数:

- --domain
- cloud.ctrm

这些 Deployment 修改之后,会进行更新,接下来 Pilot 和 Mixer 就能正确的识别和处理集群中的服务了。