0

我很难弄清楚如何获得 Kubernetes DNS(skydns,现在称为 kube-dns),以便 kube-dns 容器/pod 知道如何使用无论如何都可以工作的 IP 地址或主机连接到 API 服务器如果一个主节点出现故障,并且另一个 API 服务器在具有不同 IP 地址的主机上启动?

我曾尝试使用实际的 Kubernetes 服务,但它在端口 443 上运行,并且 kube-dns(以及以前的 kube2sky)无法连接到它。

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

4

3 回答 3

0

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

我认为 kube-dns 在 Kubernetes 的设计中不需要连接到 APIServer。

但是,如果您正在尝试找到一种稳定的方式来连接到 APIServer(就像您所说的“无论主节点是否关闭并且另一个 API 服务器在具有不同 IP 地址的主机上启动”),您已经这样做了,如果您使用kubeadm有关 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.

您可以通过 10.96.0.1:443(即 ClusterIP)或 10.140.0.2:6443(即 APIServer pod 的 pod IP 地址)通过以下方式访问 APIServer:

$ 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"
}
于 2017-04-06T12:13:50.163 回答
0

您可以使用:

kubelet describe svc kubernetes

于 2017-04-06T16:31:30.753 回答
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目标端口相同的服务再添加一个端口。

于 2017-04-06T04:58:34.553 回答