kubernetes之coredns玩法

1、概述html

新版本的kubernetes默认使用了coredns,这里就不赘述了。直达车:https://coredns.io/https://kubernetes.io/docs/tasks/administer-cluster/dns-custom-nameservers/#corednsnode

2、coredns配置api

在以前的博客里面介绍过使用dnsmasq做为coredns的上游dns的玩法,这里介绍直接修改coredns的配置,coredns的配置是Corefile,能够经过configmap控制修改。默认的配置以下:app

# kubectl get cm coredns -n kube-system -o yamldom

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 loop reload loadbalance }

errors、health等都是cordns的插件,更多插件参考:https://coredns.io/plugins/curl

kuberneets1.10开始,支持将kube-dns的配置转换成coredns的配置。kube-dns里面使用stubDomains来指定存根域,即oop

apiVersion: v1 kind: ConfigMap metadata: name: kube-dns namespace: kube-system data: stubDomains: | {"demo.local": ["10.0.0.1"]}

 

使用upstreamNameservers来指定非集群dns查找使用外部dns解析,若是设置default默认只会使用node节点dns解析。测试

apiVersion: v1 kind: ConfigMap metadata: name: kube-dns namespace: kube-system data: upstreamNameservers: | ["10.0.0.1"]

 

在coredns里面使用upstream和proxy实现kube-dns的stubDomains、upstreamNameservers的功能。ui

一、coredns使用consul做为dns查询url

修改coredns的configmap:

# kubectl -n kube-system edit  cm coredns

 
 
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
        loop
        reload
        loadbalance
    }
 service.hq:53 { 
errors
cache
30
proxy .
10.4.9.6
}

service.hq是在consul里面设置的domain,consul使用参考我可博客:http://www.javashuo.com/article/p-ornwlmdi-em.html,个人consul设置的dns端口是53,默认是8600. 10.4.9.6是consul的监听地址。

从新调度pod使配置生效:

kubectl get pods -n kube-system | grep coredns | awk '{print $1}' | xargs kubectl -n kube-system delete pod

 

测试:

activity是咱们在consul里面注册的服务,sleep是包含curl和ping的pod。

# kubectl exec -it -n istio-system sleep-754684654f-c6mct -- ping activity.service.hq

 

附录:

sleep的yaml:

apiVersion: v1 kind: ServiceAccount metadata: name: sleep
--- apiVersion: v1 kind: Service metadata: name: sleep labels: app: sleep spec: ports: - port: 80 name: http selector: app: sleep
--- apiVersion: extensions/v1beta1 kind: Deployment metadata: name: sleep spec: replicas: 1 template: metadata: labels: app: sleep spec: serviceAccountName: sleep containers: - name: sleep image: pstauffer/curl command: ["/bin/sleep", "3650d"] imagePullPolicy: IfNotPresent ---
相关文章
相关标签/搜索