为远程集群中的服务提供DNS解析,则现有应用程序不需要做修改就可以运行,因为应用程序通常期望通过其DNS名称来解析服务并访问所得到的IP地址。Istio本身不使用DNS在服务之间路由请求,同一个Kubernetes集群下的服务会共享一个相同的DNS后缀(例如svc.cluster.local)。Kubernetes DNS为这些服务提供DNS解析能力。为了给远程集群中的服务提供相似的设置,将远程集群中的服务以<name>.<namespace>.global的格式命名。
Istio安装包中附带了一个CoreDNS服务器,该服务器将为这些服务提供DNS解析能力。为了利用这个DNS解析能力,需要配置Kubernetes的DNS服务指向该CoreDNS服务。该CoreDNS服务将作为.global DNS域的DNS服务器。
对于使用kube-dns的集群,请创建以下配置项或更新现有的配置项:
kubectl apply -f - <<EOF
apiVersion: v1
kind: ConfigMap
metadata:
name: kube-dns
namespace: kube-system
data:
stubDomains: |
{"global": ["$(kubectl get svc -n istio-system istiocoredns -o jsonpath={.spec.clusterIP})"]}
EOF
对于使用CoreDNS的集群,请创建以下配置项或更新现有的配置项:
kubectl apply -f - <<EOF
apiVersion: v1
kind: ConfigMap
metadata:
name: coredns
namespace: kube-system
data:
Corefile: |
.:53 {
errors
health
kubernetes cluster.local in-addr.arpa ip6.arpa {
pods insecure
upstream
fallthrough in-addr.arpa ip6.arpa
}
prometheus :9153
proxy . /etc/resolv.conf
cache 30
reload
loadbalance
}
global:53 {
errors
cache 30
proxy . $(kubectl get svc -n istio-system istiocoredns -o jsonpath={.
spec.clusterIP})
}
EOF