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

时间:2019-11-03 19:30:05

标签: kubernetes kubernetes-helm kubernetes-pod

该服务在pods的/etc/resolv.conf下分配名称服务器,通常它应从主机/etc/resolv.conf中拾取,我在pods的/etc/resolv.conf下看到不同的名称服务器,是否有任何我可以配置的kbernetes(kubedns)上的配置,以便Pod /etc/resolv.conf具有8.8.8.8

4 个答案:

答案 0 :(得分:1)

kube-dns确实(通过Kubelet)修改了该文件。 kube-dns监视API服务器并观察对服务和端点的更改,并使DNS记录保持最新。 在Cluster中,您应该使用内部Kubernetes DNS。

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

看看here

如果您要覆盖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

DNS Policy

答案 1 :(得分:0)

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

它允许Pod忽略Kubernetes环境中的DNS设置。应该使用Pod Spec中的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

在“部署”部分中具有以下配置:

  dnsConfig:
    nameservers:
      - 8.8.8.8
  dnsPolicy: "None"

cat /etc/resolv.conf nameserver 8.8.8.8

答案 2 :(得分:0)

您有两个选择:

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

通过这种方式,您可以映射dnsConfig/etc/resolv.conf中的任何内容

# cat /etc/resolv.conf
nameserver 8.8.8.8

对于upstreamNameservers,实际上存在另一种方式,就是“攻击” kube-dn:

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

但是在这种情况下,您不会在pod内做任何事情(因此/etc/resolv.conf不会被修改),但是kube-dns会使用这些名称服务器来解析。

答案 3 :(得分:0)

@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文件内部用作模板。 https://github.com/jenkinsci/kubernetes-plugin/blob/master/examples/中提供了更多示例。