如何使用非Kubernetes API特定主机的IP设置Kubernetes DNS

时间:2016-09-09 13:56:24

标签: kubernetes skydns kube-dns

我很难找到如何获得kubernetes DNS(skydns,现在称为kube-dns),以便kube-dns容器/ pod知道如何使用IP地址或主机连接到API服务器无论主节点是否关闭,另一个API服务器是否在具有不同IP的主机上启动,都可以工作?我尝试过使用实际的kubernetes服务,但它运行在端口443上,而kube-dns(以前的kube2sky)无法连接到它。

除了拥有删除和重新创建kube-dns pod的机制之外,还有更简单的方法吗?

3 个答案:

答案 0 :(得分:0)

您可以查询endpoint并直接查找与kubernetes对应的那个。我可以通过两种方式获得它,一种是直接查询端点:

$ kubectl get ep
NAME         ENDPOINTS              AGE
kubernetes   192.168.122.116:8443   15h

或描述在kubernetes命名空间

中运行的服务default
$ kubectl describe svc kubernetes
Name:                   kubernetes
Namespace:              default
Labels:                 component=apiserver
                        provider=kubernetes
Annotations:            <none>
Selector:               <none>
Type:                   ClusterIP
IP:                     10.0.0.1
Port:                   https   443/TCP
Endpoints:              192.168.122.116:8443
Session Affinity:       ClientIP
Events:                 <none>

这里我得到了主机的IP地址和端口,它没有在443上运行8443。看看这是否有助于解决你的问题。

或者尝试向目标端口相同的kubernetes服务添加一个端口。

答案 1 :(得分:0)

  

如何获得kubernetes DNS(skydns,现在称为kube-dns),以便kube-dns容器/ pod知道如何使用和IP地址或主机连接到API服务器

我不认为kube-dns需要连接到Kubernetes的APIServer&#39;设计。

但是如果你试图找到一种稳定的方式来连接到APIServer(就像你说的那样#34;无论主节点是否关闭而另一个API服务器是在具有不同ip的主机上启动的,&#34;),如果您使用kubeadmmore info about kubeadm)部署群集,那么您已经完成了此操作。这是通过kubernetes服务实现的,你可以这样检查:

$ kubelet describe svc kubernetes
Name:                   kubernetes
Namespace:              default
Labels:                 component=apiserver
                        provider=kubernetes
Selector:               <none>
Type:                   ClusterIP
IP:                     10.96.0.1
Port:                   https   443/TCP
Endpoints:              10.140.0.2:6443
Session Affinity:       ClientIP
No events.

您可以通过以下方式访问APIServer:10.96.0.1:443(其为CluterIP)或10.140.0.2:6443(其为APIServer pod的PodIP):

$ curl https://10.140.0.2:6443/version --cert /etc/kubernetes/pki/apiserver.pem --key /etc/kubernetes/pki/apiserver-key.pem --cacert /etc/kubernetes/pki/ca.pem
{
  "major": "1",
  "minor": "5",
  "gitVersion": "v1.5.4",
  "gitCommit": "7243c69eb523aa4377bce883e7c0dd76b84709a1",
  "gitTreeState": "clean",
  "buildDate": "2017-03-07T23:34:32Z",
  "goVersion": "go1.7.4",
  "compiler": "gc",
  "platform": "linux/amd64"
}

答案 2 :(得分:0)

您可以使用:

kubelet describe svc kubernetes