我很难找到如何获得kubernetes DNS(skydns,现在称为kube-dns),以便kube-dns容器/ pod知道如何使用IP地址或主机连接到API服务器无论主节点是否关闭,另一个API服务器是否在具有不同IP的主机上启动,都可以工作?我尝试过使用实际的kubernetes服务,但它运行在端口443上,而kube-dns(以前的kube2sky)无法连接到它。
除了拥有删除和重新创建kube-dns pod的机制之外,还有更简单的方法吗?
答案 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;),如果您使用kubeadm
(more 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