我遇到了Jenkins pod和kube-dns的问题。我的Jenkins似乎离线了,我无法安装任何插件,这是因为DNS的原因。
这是我得到的错误:"未知主机异常:updates.jenkins.io">
由于这个错误,我无法下载任何插件,所以我的Jenkins完全没有用。
我已经使用"HostPort"暴露了我的部署,以便在私人IP中拥有我的Jenkins。重要的是要说,这个私有IP可以访问互联网,所以我的pod也应该有它。
这是吊舱的/etc/resolv的内容:
jenkins@jenkins-86b49f4cb4-zchct:/$ cat /etc/resolv.conf
nameserver 10.0.0.10
search default.svc.cluster.local svc.cluster.local cluster.local reddog.microsoft.com
options ndots:5
这是我的kube dns:
[root@azureutils1 ~]# kubectl get svc --namespace kube-system --insecure-skip-tls-verify
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
heapster ClusterIP 10.0.243.103 <none> 80/TCP 5d
kube-dns ClusterIP 10.0.0.10 <none> 53/UDP,53/TCP 5d
kubernetes-dashboard ClusterIP 10.0.237.105 <none> 80/TCP 5d
metrics-server ClusterIP 10.0.34.149 <none> 443/TCP 5d
因此resolv.conf的IP与kube-dns服务的IP相匹配。如果我使用公共LoadBalancer公开我的Jenkins,我没有这个问题,但我希望我的Jen金斯留在一个私人IP中。
对这个问题有什么想法吗?
问候
发生这种问题是因为您的pod DNS没有配置。可以通过添加来修复
hostNetwork: true
dnsPolicy: ClusterFirstWithHostNet
符合你吊舱的规格。
如果您的意思是解决方案,它取决于您如何设置集群、网络以及如何公开服务。如果使用带helm的GKE中的默认安装过程,则服务将使用ClusterIP作为类型,然后解析就可以了。我的集群策略是部署中的ClusterFirst。
我在kube-dns配置映射中添加了一个条目,用于解析我正在使用的VPC上的名称,但这对于公共名称解析来说是不需要的。
如果你被卡住了,我可以推荐这个开始:
https://kubernetes.io/docs/tasks/administer-cluster/dns-debugging-resolution/
然后,如果你有一个无法解决的问题,试着用尽可能多的细节更新问题。例如,进入jenkins容器,检查/etc/resolv.conf以及使用了什么名称服务器。默认情况下,它是Kubernetes集群范围内的一个IP,并且该IP设置为通过kube-dns进行解析。