Kubernetes HostPort with dnsmasq issue



我试图通过kubernetes设置一个dnsmasq pod。html文件如下:

apiVersion: apps/v1
kind: StatefulSet
metadata:
name: dnsmasq1
labels:
name: dnsmasq1
spec:
serviceName: "dnsmasq1"
replicas: 1
selector:
matchLabels:
name: dnsmasq1
volumeClaimTemplates:
- metadata:
name: dnsmasqconf-pv1
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 1Gi
storageClassName: ceph-rbd-sc
template:
metadata:
labels:
name: dnsmasq1
spec:
hostNetwork: false
affinity:
podAntiAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
- labelSelector:
matchLabels:
name: dnsmasq1
topologyKey: "kubernetes.io/hostname"
hostname: dnsmasq1
containers:
- name: dnsmasq1
image: jpillora/dnsmasq
ports:
- containerPort: 8080
hostPort: 8082
imagePullPolicy: IfNotPresent
env:
- name: HTTP_USER
value: "****"
- name: HTTP_PASS
value: "****"
volumeMounts:
- mountPath: /mnt/config
name: dnsmasqconf-pv1
resources:
requests:
memory: 250Mi
limits:
memory: 250Mi
nodeSelector:
etiket: worker
dnsPolicy: "None"
dnsConfig:
nameservers:
- 8.8.8.8
volumes:
- name: dnsmasqconf-pv1
persistentVolumeClaim:
claimName: dnsmasqconf-pv1

这工作得很好,我可以使用节点的IP地址到达pod。我决定在一台测试机器上将pod作为dns服务器进行测试,但是没有解析条目。我认为这是因为我没有使用Pod的IP作为dns服务器,而是使用节点的IP。如何将此pod设置为对外使用的dns服务器?我没有云提供商,所以我不认为我可以在这里使用loadbalancer IP。

我不认为你可以使用dnsmasq作为外部dns服务器,因为dnsmasq是一个轻量级的dns转发器,旨在为小型网络提供dns服务。它可以提供不在全局DNS中的本地机器的名称。Dnsmasq可以很容易地为给定的域指定要使用的名称服务器,它是管理kubernetes集群中的通信的理想选择。

在/etc/networkmanager/NetworkManager.conf中,在[main]部分添加或取消注释以下行:

dns = dnsmasq

创建/etc/networkmanager/dnsmasq.d/kube.conf:

服务器=/cluster.local/10.90.0.10

这告诉dnsmasq查询集群中的任何内容。本地域需要转发到DNS服务器10.90.0.10。这恰好是kube-system名称空间中kube-dns服务的默认IP地址。如果集群的DNS服务有不同的IP地址,则需要指定它。

现在,在你运行systemctl restart NetworkManager之后,你的/etc/resolv.conf应该看起来像这样:

#由NetworkManager生成

搜索localdomain

命名服务器127.0.0.1

重要的一行是名称服务器127.0.0.1。这意味着DNS请求被发送到本地主机,由dnsmasq处理。

相关内容

  • 没有找到相关文章

最新更新