Kubernetes 如何将/etc/resolv.conf下的自定义名称服务器添加到pod中?

Kubernetes 如何将/etc/resolv.conf下的自定义名称服务器添加到pod中?,kubernetes,kubernetes-helm,kubernetes-pod,Kubernetes,Kubernetes Helm,Kubernetes Pod,哪个服务在pods的/etc/resolv.conf下分配名称服务器,通常它应该从主机/etc/resolv.conf获取,我在pods的/etc/resolv.conf下看到不同的名称服务器,kberneteskubedns上是否有我可以配置的任何配置,以便pods/etc/resolv.conf具有8.8.8.8kube dns通过Kubelet修改此文件。kube dns监视API服务器,观察服务和端点的更改,并保持dns记录最新。 在集群内,您应该使用内部Kubernetes DNS D

哪个服务在pods的/etc/resolv.conf下分配名称服务器,通常它应该从主机/etc/resolv.conf获取,我在pods的/etc/resolv.conf下看到不同的名称服务器,kberneteskubedns上是否有我可以配置的任何配置,以便pods/etc/resolv.conf具有8.8.8.8

kube dns通过Kubelet修改此文件。kube dns监视API服务器,观察服务和端点的更改,并保持dns记录最新。 在集群内,您应该使用内部Kubernetes DNS

DNS是附加控制器,您可以使用任何其他实现

看一看

如果你想覆盖kube dns

apiVersion: v1
kind: Pod
metadata:
  namespace: default
  name: dns-example
spec:
  containers:
    - name: test
      image: nginx
  dnsPolicy: "None"
  dnsConfig:
    nameservers:
      - 1.2.3.4
    searches:
      - ns1.svc.cluster-domain.example
      - my.dns.search.suffix
    options:
      - name: ndots
        value: "2"
      - name: edns0
kube dns通过Kubelet修改此文件。kube dns监视API服务器,观察服务和端点的更改,并保持dns记录最新。 在集群内,您应该使用内部Kubernetes DNS

DNS是附加控制器,您可以使用任何其他实现

看一看

如果你想覆盖kube dns

apiVersion: v1
kind: Pod
metadata:
  namespace: default
  name: dns-example
spec:
  containers:
    - name: test
      image: nginx
  dnsPolicy: "None"
  dnsConfig:
    nameservers:
      - 1.2.3.4
    searches:
      - ns1.svc.cluster-domain.example
      - my.dns.search.suffix
    options:
      - name: ndots
        value: "2"
      - name: edns0

从K8S1.9开始,如果您想为pod设置特定的dns配置,可以使用

它允许Pod忽略Kubernetes环境中的DNS设置。应使用Pod规范中的dnsConfig字段提供所有DNS设置

默认情况下,名称服务器IP是kube dns的Kubernetes服务IP

cat /etc/resolv.conf
nameserver 10.96.0.10
search default.svc.cluster.local svc.cluster.local cluster.local
options ndots:5

kubectl get service -n kube-system
kube-dns               ClusterIP   10.96.0.10      <none>        53/UDP,53/TCP,9153/TCP   2d21h
cat/etc/resolv.conf
nameserver 8.8.8.8

从k8s 1.9开始,如果要为pod设置特定的dns配置,可以使用

它允许Pod忽略Kubernetes环境中的DNS设置。应使用Pod规范中的dnsConfig字段提供所有DNS设置

默认情况下,名称服务器IP是kube dns的Kubernetes服务IP

cat /etc/resolv.conf
nameserver 10.96.0.10
search default.svc.cluster.local svc.cluster.local cluster.local
options ndots:5

kubectl get service -n kube-system
kube-dns               ClusterIP   10.96.0.10      <none>        53/UDP,53/TCP,9153/TCP   2d21h
cat/etc/resolv.conf nameserver 8.8.8.8

您有两个选项:

1.-将其放在configMap中,并将其映射到/etc/resolv.conf,在这种情况下,它将被configMap中的内容替换

2.-你可以这样做:

apiVersion: v1
kind: Pod
metadata:
  namespace: default
  name: my-pod
spec:
  containers:
    - name: nginx
      image: nginx
  dnsPolicy: "None"
  dnsConfig:
    nameservers:
      - 8.8.8.8
这样,您就可以在/etc/resolv.conf下映射dnsConfig中的任何内容

实际上,还有另一种方法,通过入侵kube dns,用于上游服务器:

但在这种情况下,您不会在pod内执行任何操作,因此/etc/resolv.conf不会被修改,但kube dns将使用这些名称服务器进行解析。

您有两种选择:

1.-将其放在configMap中,并将其映射到/etc/resolv.conf,在这种情况下,它将被configMap中的内容替换

2.-你可以这样做:

apiVersion: v1
kind: Pod
metadata:
  namespace: default
  name: my-pod
spec:
  containers:
    - name: nginx
      image: nginx
  dnsPolicy: "None"
  dnsConfig:
    nameservers:
      - 8.8.8.8
这样,您就可以在/etc/resolv.conf下映射dnsConfig中的任何内容

实际上,还有另一种方法,通过入侵kube dns,用于上游服务器:


但在这种情况下,您不会在pod中执行任何操作,因此/etc/resolv.conf不会被修改,但kube dns将使用这些名称服务器进行解析。

@venkatesh我认为您指的是jenkins文件中使用的pod模板。 如果是这样的话,试试这个

podTemplate( yaml:"""
apiVersion: v1
kind: Pod
metadata:
  name: pod-example
spec:
  containers:
  - name: ubuntu
    image: ubuntu:trusty
    command: ["echo"]
    args: ["Hello World"]
 dnsPolicy: "None"
 dnsConfig:
   nameservers:
   - 8.8.8.8
""")
yaml文件可以直接在jenkins文件中用作模板。
更多示例见。

@venkatesh我认为您指的是jenkins文件中使用的podTemplate。 如果是这样的话,试试这个

podTemplate( yaml:"""
apiVersion: v1
kind: Pod
metadata:
  name: pod-example
spec:
  containers:
  - name: ubuntu
    image: ubuntu:trusty
    command: ["echo"]
    args: ["Hello World"]
 dnsPolicy: "None"
 dnsConfig:
   nameservers:
   - 8.8.8.8
""")
yaml文件可以直接在jenkins文件中用作模板。
更多的例子见。

你能提供任何支持这一理论的信息吗?从未听说过kube dns修改/etc/resolv.conf文件。@当然,这是通过Kubelet间接完成的。我不这么认为。我想说你把kube dns和kube proxy搞混了。我相信kube proxy在当前的实现中只会修改iptables。那么,你读过kube dns直接或间接修改resolv.conf文件的地方吗?因为听起来确实很自信,而且根本没有任何意义。你能提供任何支持这一理论的信息吗?从未听说过kube dns修改/etc/resolv.conf文件。@当然,这是通过Kubelet间接完成的。我不这么认为。我想说你把kube dns和kube proxy搞混了。我相信kube proxy在当前的实现中只会修改iptables。那么,你读过kube dns直接或间接修改resolv.conf文件的地方吗?因为这听起来非常自信,而且根本没有任何意义。谢谢您,是否可以在podTemplatelabel:label,containers:[containerTemplatename:'maven',image:'maven:3.5-jdk-8',command:'cat',ttyEnabled:true]下添加dns配置,感谢您可以在podTemplatelabel:label,containers:[containerTemplatename:'maven',image:'maven:3.5-jdk-8',command:'cat',ttyEnabled:true]下添加dns配置,