我使用 Kubernetes v1.11.3,它使用 coredns 来解析主机或服务名称,但我发现在 pod 中,解析无法正常工作,
# kubectl get services --all-namespaces -o wide
NAMESPACE NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE SELECTOR
default kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 50d <none>
kube-system calico-etcd ClusterIP 10.96.232.136 <none> 6666/TCP 50d k8s-app=calico-etcd
kube-system kube-dns ClusterIP 10.96.0.10 <none> 53/UDP,53/TCP 50d k8s-app=kube-dns
kube-system kubelet ClusterIP None <none> 10250/TCP 32d <none>
testalex grafana NodePort 10.96.51.173 <none> 3000:30002/TCP 2d app=grafana
testalex k8s-alert NodePort 10.108.150.47 <none> 9093:30093/TCP 13m app=alertmanager
testalex prometheus NodePort 10.96.182.108 <none> 9090:30090/TCP 16m app=prometheus
Run Code Online (Sandbox Code Playgroud)
以下命令无响应
# …Run Code Online (Sandbox Code Playgroud) 我想在 Kubernetes 中使用 Cloudflare 的1.1.1.1 和 1.0.0.1名称服务器,以及DNS over TLS。它看起来像我可以用做核心的DNS。我需要以某种方式设置以下内容:
1.1.1.1和1.0.0.12606:4700:4700::1111和2606:4700:4700::1001tls.cloudflare-dns.com我应该是什么ConfigMap样子?我已经在下面开始了:
apiVersion: v1
kind: ConfigMap
data:
upstreamNameservers: |
["1.1.1.1", "1.0.0.1"]
Run Code Online (Sandbox Code Playgroud) 我已经Ubuntu 16.04使用以下命令初始化了kubernetes v1.13.1集群:
sudo kubeadm init --token-ttl=0 --apiserver-advertise-address=192.168.88.142
Run Code Online (Sandbox Code Playgroud)
并weave使用以下方式安装:
kubectl apply -f "https://cloud.weave.works/k8s/net?k8s-version=$(kubectl version | base64 | tr -d '\n')"
Run Code Online (Sandbox Code Playgroud)
我有10个raspberry pi充当工作程序节点并连接到集群。所有这些都运行良好的部署。这些节点正在运行Pod,这些Pod尝试连接到物联网中心visdwk-azure-devices.net并发布一些数据。在10个节点中,只有少数几个节点可以连接,其他节点则抛出错误unable to connect to iot hub。我进行了ping测试,发现他们在ping google的公共IP地址时无法ping google。
这使我认为coredns吊舱有问题。我按照此文档进行了以下测试。
Pod中包含以下内容 /etc/resolv.conf
nameserver 10.96.0.10
search visdwk.svc.cluster.local svc.cluster.local cluster.local
options ndots:5
Run Code Online (Sandbox Code Playgroud)
在我看来这很正常。所有coredns pod都运行良好。
coredns-86c58d9df4-42xqc 1/1 Running 8 1d11h
coredns-86c58d9df4-p6d98 1/1 Running 7 1d6h
Run Code Online (Sandbox Code Playgroud)
我也nslookup kubernetes.default从busybox容器中完成了操作,并获得了正确的响应。以下是的日志coredns-86c58d9df4-42xqc
.:53
2019-02-08T08:40:10.038Z [INFO] CoreDNS-1.2.6
2019-02-08T08:40:10.039Z [INFO] linux/amd64, go1.11.2, 756749c …Run Code Online (Sandbox Code Playgroud) 我们有一项可以批量发送大量事件的服务。它基本上打开多个 http POST 连接。
自从我们将服务转移到 kubernetes 以来,我们getaddrinfo: Temporary failure in name resolution时不时就会出错。(大多数呼叫都有效,但有些失败,这很奇怪。
谁能解释为什么以及如何解决?
我有一个非常标准的 Kubernetes 安装,在 Ubuntu 上作为单节点集群运行。我正在尝试配置 CoreDNS 以解析我的 Kubernetes 集群中的所有内部服务和一些外部域名。到目前为止,我只是在试验。我首先创建了一个 busybox pod,如下所示:https : //kubernetes.io/docs/tasks/administer-cluster/dns-debugging-resolution/
在我对核心文件进行更改之前,一切都按照指南中的描述工作。我看到几个问题:
kubectl -n kube-system edit configmap coredns并替换.:53为cluster.local:53. 等待之后,事情看起来很有希望。 google.com决议开始失败,而kubernetes.default.svc.cluster.local继续成功。然而,kubernetes.default决议也开始失败。这是为什么?在busybody pod 中仍然有一个搜索条目。所有改变的是核心文件。svc.cluster.local/etc/resolv.conf我尝试向核心文件添加额外的节/块(同样,通过编辑配置映射)。我添加了一个简单的块:
.:53{
log
}
Run Code Online (Sandbox Code Playgroud)
似乎核心文件无法编译或什么的。Pod 看起来很健康,不会向日志报告任何错误,但请求都挂起并失败。
我曾尝试添加日志插件,但这不起作用,因为该插件仅适用于与插件匹配的域,并且域名不匹配或核心文件已损坏。
为了透明,这是我的新核心文件:
cluster.local:53 {
errors
log
health
kubernetes cluster.local in-addr.arpa ip6.arpa {
pods insecure
upstream
fallthrough in-addr.arpa ip6.arpa
}
prometheus :9153
forward . /etc/resolv.conf
cache 30
loop
reload
loadbalance
}
Run Code Online (Sandbox Code Playgroud) 我已经部署了一个由一个主节点和两个工作节点组成的 Kubernetes 集群,使用kubeadmFlannel 网络驱动程序(所以我将--pod-network-cidr=10.244.0.0/16标志传递给kubeadm init)。
这些节点使用 VPN 进行通信,以便:
当我创建一个新的 pod 并尝试 ping google 时,出现以下错误:
/ # ping google.com
ping: bad address 'google.com'
Run Code Online (Sandbox Code Playgroud)
我按照Kubernetes DNS 调试解析文档页面中的说明进行操作:
$ kubectl exec -ti busybox -- nslookup kubernetes.default
Server: 10.96.0.10
Address 1: 10.96.0.10
nslookup: can't resolve 'kubernetes.default'
command terminated with exit code 1
Run Code Online (Sandbox Code Playgroud)
$ kubectl exec busybox cat /etc/resolv.conf
nameserver 10.96.0.10
search default.svc.cluster.local svc.cluster.local cluster.local …Run Code Online (Sandbox Code Playgroud) 从 pod 内解析外部域失败并显示SERVFAIL消息。在日志中,提到了i/o 超时错误。
应该从 pod 成功解析外部域。
apiVersion: v1
kind: Pod
metadata:
name: dnsutils
namespace: default
spec:
containers:
- name: dnsutils
image: gcr.io/kubernetes-e2e-test-images/dnsutils:1.3
command:
- sleep
- "3600"
imagePullPolicy: IfNotPresent
restartPolicy: Always
Run Code Online (Sandbox Code Playgroud)
创建上面的 pod(来自调试 DNS 解析帮助页面)。
跑 kubectl exec dnsutils -it -- nslookup google.com
pig@pig202:~$ kubectl exec dnsutils -it -- nslookup google.com
Server: 10.152.183.10
Address: 10.152.183.10#53
** server can't find google.com.mshome.net: SERVFAIL
command terminated with exit code 1
Run Code Online (Sandbox Code Playgroud)
还运行 kubectl exec …
发生了什么:
我尝试使用externalName规范创建一个服务端点,以允许在 Pod 内运行的微服务访问本地主机上的本地 MySQL 服务器。
这是 yaml 文件的相关部分:
apiVersion: v1
kind: Service
metadata:
name: mysql
namespace: default
spec:
type: ExternalName
externalName: host.minikube.internal
Run Code Online (Sandbox Code Playgroud)
您期望发生的情况:
我希望能够连接,但我的 SpringBoot 容器显示 mysql 连接不起作用。我已经测试了微服务,它可以在 Docker 中使用相同的 MySQL 数据库运行。
如何重现它(尽可能少且精确):
正常安装 minikube 和 kubernetes,使用上面给出的 mysql 服务运行https://k8s.io/examples/admin/dns/dnsutils.yamldnsutils中的映像。
我们还需要知道什么吗?:
我已经测试了此处详细的故障排除(https://kubernetes.io/docs/tasks/administer-cluster/dns-debugging-resolution/),但它没有解决问题。运行时:
kubectl exec -i -t dnsutils -- nslookup mysql.default
Run Code Online (Sandbox Code Playgroud)
我收到以下消息:
Server: 10.96.0.10
Address: 10.96.0.10#53
mysql.default.svc.cluster.local canonical name = host.minikube.internal.
** server can't find host.minikube.internal: SERVFAIL
command terminated with exit code 1
Run Code Online (Sandbox Code Playgroud)
我已经验证它 …
我正在运行Kubernetes 1.11,并尝试配置Kubernetes集群以首先检查本地名称服务器。我阅读了Kubernetes网站上有关自定义CoreDNS的说明,并使用仪表板为CoreDNS编辑了系统ConfigMap。得到的corefile值为:
.:53 {
errors
health
kubernetes cluster.local in-addr.arpa ip6.arpa {
pods insecure
upstream 192.168.1.3 209.18.47.61
fallthrough in-addr.arpa ip6.arpa
}
prometheus :9153
proxy . /etc/resolv.conf
cache 30
reload
}
Run Code Online (Sandbox Code Playgroud)
您可以将本地地址视为第一个上游名称服务器。我的问题是,这似乎没有产生任何影响。我有一个运行ping&nslookup的容器,它们都无法解析本地名称服务器中的名称。
我暂时通过在一些需要的Pod规范中指定名称服务器配置来解决此问题,但我不喜欢这种解决方法。
如何强制CoreDNS根据更改后的ConfigMap更新?我可以看到它是kube-system名称空间中的Deployment,但是我还没有找到有关如何重新加载它或以其他方式响应已更改的配置的文档。
我知道这个问题被问了十遍,但没有任何帮助通过互联网搜索。
我的设置:
CentOS Linux release 7.5.1804 (Core)
Docker Version: 18.06.1-ce
Kubernetes: v1.12.3
Run Code Online (Sandbox Code Playgroud)
由官方指南和本指南安装:https : //www.techrepublic.com/article/how-to-install-a-kubernetes-cluster-on-centos-7/
CoreDNS窗格处于Error / CrashLoopBackOff状态。
kube-system coredns-576cbf47c7-8phwt 0/1 CrashLoopBackOff 8 31m
kube-system coredns-576cbf47c7-rn2qc 0/1 CrashLoopBackOff 8 31m
Run Code Online (Sandbox Code Playgroud)
我的/etc/resolv.conf:
nameserver 8.8.8.8
Run Code Online (Sandbox Code Playgroud)
还尝试了我的本地dns-resolver(router)
nameserver 10.10.10.1
Run Code Online (Sandbox Code Playgroud)
设置和初始化:
kubeadm init --apiserver-advertise-address=10.10.10.3 --pod-network-cidr=192.168.1.0/16
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
Run Code Online (Sandbox Code Playgroud)
我尝试通过以下方法解决此问题:编辑coredns:root @ kub〜]#kubectl编辑cm coredns -n kube-system并进行更改
proxy . /etc/resolv.conf
Run Code Online (Sandbox Code Playgroud)
直接到
proxy . 10.10.10.1
Run Code Online (Sandbox Code Playgroud)
或代理。8.8.8.8
还试图:
kubectl -n kube-system get deployment coredns -o yaml | sed 's/allowPrivilegeEscalation: false/allowPrivilegeEscalation: true/g' | kubectl apply -f -
Run Code Online (Sandbox Code Playgroud)
仍然没有任何帮助。 …
coredns ×10
kubernetes ×10
dns ×4
docker ×2
kube-dns ×2
centos7 ×1
cloudflare ×1
kubeadm ×1
minikube ×1
nameservers ×1
ubuntu ×1