首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Kubernetes Pod DNS解析

Kubernetes Pod DNS解析
EN

Server Fault用户
提问于 2018-09-03 13:33:02
回答 3查看 15.3K关注 0票数 4

目前能够将所有服务解析到IP地址和telnet,并对它们进行ping。无法将荚解析为IP地址。尽管可以使用kubectl和telnet查找pod地址,并对它们进行ping。如何需要配置DNS以解析Kubernetes 1.9.6,dns-控制器:1.9.1中的吊舱。

EN

回答 3

Server Fault用户

回答已采纳

发布于 2019-01-08 20:13:10

@mk_sta 's的回答稍微简单一些,您可以运行这条内线来测试您的DNS:

kubectl run busybox --image=busybox --rm --attach --command -- sh -c "cat /etc/resolv.conf; nslookup $POD.$NAMESPACE.pod.cluster.local"

示例输出:

代码语言:javascript
复制
If you don't see a command prompt, try pressing enter.

Server:         100.64.0.10
Address:        100.64.0.10:53


*** Can't find $POD.$NAMESPACE.pod.cluster.local: No answer

deployment.apps "busybox" deleted

更重要的是,它在运行后删除了部署/吊舱。

对我来说,问题是我的荚处于状态集,因此Pod DNS解析有点不同。您必须使用(例如):

web-{0..N-1}.nginx.default.svc.cluster.local

pod-N.$GOVERNING_STATEFULSET.$NAMESPACE.svc.cluster.local

https://kubernetes.io/docs/concepts/workloads/controllers/statefulset/

这是一件可能出错的事。你可能想提供更多关于你的特殊情况的信息。

票数 6
EN

Server Fault用户

发布于 2018-09-04 11:46:55

您可以使用busybox创建测试Pod,以检查DNS解决函数并调试该问题:

代码语言:javascript
复制
apiVersion: v1
kind: Pod
metadata:
  name: busybox
  namespace: default
spec:
  containers:
  - image: busybox
    command:
      - sleep
      - "3600"
    imagePullPolicy: IfNotPresent
    name: busybox
  restartPolicy: Always

检查/etc/resolv.conf Pod上的busybox文件:

代码语言:javascript
复制
kubectl exec busybox cat /etc/resolv.conf

内容应如下:

代码语言:javascript
复制
search default.svc.cluster.local svc.cluster.local cluster.local .....
nameserver 10.0.0.10
options ndots:5

对集群中的目标Pod发出查找请求:

代码语言:javascript
复制
kubectl exec -ti busybox -- nslookup XXX-XX-XX-XX.default.pod.cluster.local

如果尚未解析Pods名称,可以使用kubectl logs命令检查DNS组件日志:

代码语言:javascript
复制
kubectl logs --namespace=kube-system $(kubectl get pods --namespace=kube-system -l k8s-app=kube-dns -o name) -c kubedns
kubectl logs --namespace=kube-system $(kubectl get pods --namespace=kube-system -l k8s-app=kube-dns -o name) -c dnsmasq
kubectl logs --namespace=kube-system $(kubectl get pods --namespace=kube-system -l k8s-app=kube-dns -o name) -c healthz
票数 0
EN

Server Fault用户

发布于 2020-03-19 17:52:29

我看到的解决这一问题的最佳方法是创建一个跳跃式Pod。

步骤1.创建带有规范文件的吊舱。

代码语言:javascript
复制
cat << ENDL >> jumpod.yml
apiVersion: v1
kind: Pod
metadata:
  name: jumpod
  namespace: default
spec:
  containers:
  - name: busybox
    image: busybox:1.28
    command:
      - sleep
      - "3600"
    imagePullPolicy: IfNotPresent
  restartPolicy: Always
ENDL

第二步,以太将吊舱应用或创建到集群和节点上。注意,它将位于默认的命名空间中。

代码语言:javascript
复制
kubectl apply -f jumpod.yml

现在,您可以使用这个吊舱来获取pod或Service的DNS。

例如:

Pod nslookup步骤3.获取您要查找的豆荚的ip地址。

代码语言:javascript
复制
kubectl get pods -o wide

步骤4.使用跳槽进行nslookup

代码语言:javascript
复制
kubectl exec -it jumpod ping 10.244.0.149

Service nslookup步骤5.查找您可能要使用的服务ip地址。

代码语言:javascript
复制
kubectl get services --all-namespaces

步骤6.现在使用跳转荚对服务ip地址执行nslookup。

代码语言:javascript
复制
kubectl exec -it jumpod nslookup 10.245.150.103

下面是一个示例,说明使用nslookup的主集群将如何工作,以及busybox (也称为跳转吊舱)如何工作。

代码语言:javascript
复制
$ kubectl exec -it jumpod nslookup 10.245.150.103
Server:    10.245.0.10
Address 1: 10.245.0.10 kube-dns.kube-system.svc.cluster.local
Name:      10.245.150.103
Address 1: 10.245.150.103 hello.develop.svc.cluster.local
$ nslookup 10.245.150.103
Server:     8.8.8.8
Address:    8.8.8.8#53
** server can't find 103.150.245.10.in-addr.arpa: NXDOMAIN

希望这能有所帮助!

如果碰巧你需要导出你在荚中创建的DNS文件,你可以使用它。

代码语言:javascript
复制
kubectl cp default/POD_NAME:bin/FILE_NAME /Users/username/FILE_NAME

或者只需使用>将其导出到文件。

票数 0
EN
页面原文内容由Server Fault提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://serverfault.com/questions/929211

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档