背景
istio dns proxy可以用于提升dns解析性能和可用性
介绍
cni模式(无需设置CAPTURE_ALL_DNS)
- istiod设置PILOT_ENABLE_IP_AUTOALLOCATE: "true"环境变量
- 开启dns proxy
针对全局,设置istiod configmap中的proxyMetadata,添加
ISTIO_META_DNS_CAPTURE: "true"
针对部分,设置pod注解,添加
annotations:
proxy.istio.io/config: |
proxyMetadata:
ISTIO_META_DNS_CAPTURE: "true"
非cni模式
- istiod设置PILOT_ENABLE_IP_AUTOALLOCATE: "true"环境变量
- 开启dns proxy
针对全局,设置istiod configmap中的proxyMetadata,添加
CAPTURE_ALL_DNS: "true"
ISTIO_META_DNS_CAPTURE: "true"
针对部分,设置pod注解,添加
annotations:
proxy.istio.io/config: |
proxyMetadata:
CAPTURE_ALL_DNS: "true"
ISTIO_META_DNS_CAPTURE: "true"
补充
为什么不使用ISTIO_META_DNS_AUTO_ALLOCATE
ISTIO_META_DNS_AUTO_ALLOCATE分配serviceentry的address不稳定,需要改为设置istiod的PILOT_ENABLE_IP_AUTOALLOCATE
如果需要创建serviceentry
- serviceentry放在一个没有pod的namespace中,设置exportTo: '.'
- 等待erviceentry分配出status.addresses,修改exportTo: '*'
原因:
controller 给serviceentry分配status.addresses是有时间窗口的,如果直接将serviceentry exportTo给其他pod,可能会引入流量路由问题