2017-07-19 113 views
0

我已经设置了包含主节点和三个节点的Kubernetes群集。我用于设置以下:
1. kubeadm(1.7.1)
2. kubectl(1.7.1)
3. kubelet(1.7.1)
4.编织(织KUBE-1.6)
5.搬运工(17.06.0〜CE-0〜Debian的)无法从群集外部访问Kubernetes仪表板

所有四个实例已在谷歌云被设置和操作系统是Debian的GNU/Linux的9(拉伸)

$ kubectl get pods --all-namespaces 
NAMESPACE  NAME        READY  STATUS RESTARTS AGE 
kube-system etcd-master      1/1  Running 0   19m 
kube-system kube-apiserver-master   1/1  Running 0   19m 
kube-system kube-controller-manager-master 1/1  Running 0   19m 
kube-system kube-dns-2425271678-cq9wh  3/3  Running 0   24m 
kube-system kube-proxy-q399p     1/1  Running 0   24m 
kube-system kube-scheduler-master   1/1  Running 0   19m 
kube-system weave-net-m4bgj     2/2  Running 0   4m 


$ kubectl get nodes 
NAME  STATUS  AGE  VERSION 
master Ready  1h  v1.7.1 
node1  Ready  6m  v1.7.1 
node2  Ready  5m  v1.7.1 
node3  Ready  7m  v1.7.1 

apiserver进程正在运行以下段落米:

root  1148 1101 1 04:38 ? 00:03:38 kube-apiserver 
--experimental-bootstrap-token-auth=true --allow-privileged=true 
--secure-port=6443 
--insecure-port=0 --service-cluster-ip-range=10.96.0.0/12 
--kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname 
--requestheader-username-headers=X-Remote-User 
--authorization-mode=Node,RBAC --advertise-address=10.128.0.2 
--etcd-servers=http://127.0.0.1:2379 

我跑到下面的命令来访问仪表板:

$ kubectl create -f https://rawgit.com/kubernetes/dashboard/master/src/deploy/kubernetes-dashboard.yaml 
serviceaccount "kubernetes-dashboard" created 
clusterrolebinding "kubernetes-dashboard" created 
deployment "kubernetes-dashboard" created 

但由于仪表盘是无法访问的,我想下面的命令太多,虽然它看起来并不十分相关。看到它的地方。

kubectl create clusterrolebinding add-on-cluster-admin --clusterrole=cluster-admin --serviceaccount=kube-system:default 

最后,我碰到了一个link这看起来与我的问题有关。我试过,但我收到以下错误:

d:\Work>kubectl --kubeconfig=d:\Work\admin.conf proxy -p 80 
Starting to serve on 127.0.0.1:80I0719 13:37:13.971200 5680 logs.go:41] http: proxy error: context canceled 
I0719 13:37:15.893200 5680 logs.go:41] http: proxy error: dial tcp 124.179.54.120:6443: connectex: No connection could be made 
because the target machine actively refused it. 

,如果我做telnet从我的笔记本电脑主IP(124.179.54.120)端口22,它的工作原理,但它并没有在端口6443.端口工作6443是上主,因为我能够nc从我的节点机给定的主端口打开了,如下图所示:

[email protected]:~$ nc -zv 10.128.0.2 6443 
master.c.kubernetes-174104.internal [10.128.0.2] 6443 (?) open 

在我的笔记本电脑,防火墙是上主已禁用,我也禁用防火墙。

# iptables -L 
Chain INPUT (policy ACCEPT) 
target  prot opt source    destination 
KUBE-SERVICES all -- anywhere    anywhere    /* kubernetes service portals */ 

Chain FORWARD (policy ACCEPT) 
target  prot opt source    destination 

Chain OUTPUT (policy ACCEPT) 
target  prot opt source    destination 
KUBE-SERVICES all -- anywhere    anywhere    /* kubernetes service portals */ 

Chain KUBE-SERVICES (2 references) 
target  prot opt source    destination 

在谷歌云控制台,我添加TCP和UDP端口6443到谷歌云防火墙的规则进入请求,但我仍无法访问使用http://localhost/ui

主配置的详细信息仪表板: Master config details

防火墙配置的详细信息:

Firewall config details

UPDATE:d:\Work\admin.conf

apiVersion: v1 
clusters: 
- cluster: 
    certificate-authority-data: <CA_cert> 
    server: https://124.179.54.120:6443 
    name: kubernetes 
contexts: 
- context: 
    cluster: kubernetes 
    user: kubernetes-admin 
    name: [email protected] 
current-context: [email protected] 
kind: Config 
preferences: {} 
users: 
- name: kubernetes-admin 
    user: 
    client-certificate-data: <client-cert> 
    client-key-data: <client-key> 

UPDATE1的内容:从三个节点中的一个,我跑以下命令:

[email protected]:~$ curl -v http://127.0.0.1:8001 
* Rebuilt URL to: http://127.0.0.1:8001/ 
* Trying 127.0.0.1... 
* TCP_NODELAY set 
* Connected to 127.0.0.1 (127.0.0.1) port 8001 (#0) 
> GET/HTTP/1.1 
> Host: 127.0.0.1:8001 
> User-Agent: curl/7.52.1 
> Accept: */* 
> 
< HTTP/1.1 502 Bad Gateway 
< Date: Thu, 20 Jul 2017 06:57:48 GMT 
< Content-Length: 0 
< Content-Type: text/plain; charset=utf-8 
< 
* Curl_http_done: called premature == 0 
* Connection #0 to host 127.0.0.1 left intact 
+0

如果'kubectl获得pods'工作,这意味着您可以与'master-node:6443'进行通信,这意味着'kubectl proxy'指的是别的东西。你可以在这里粘贴'd:\ Work \ admin.conf'吗?另外,6443端口不属于Ingress,而是'kube-apiserver'。 Ingress通常配置为在端口80和443上运行。 –

+0

'kubectl get pods'在主站上执行。没有命令从我的本地笔记本电脑运行。另外,当我说Ingress时,我指的是Google Container的[防火墙规则](https://cloud.google.com/compute/docs/vpc/firewalls)。我在上面的文章中展示了防火墙快照中的白名单端口。对困惑感到抱歉。 – Technext

+0

@EugeneChow:由于没有办法发送个人信息,我想到这里提到。发布证书前,数百个字符被删除。尽管如此,它肯定会发生在一个错误的人身上。所以感谢编辑和你的改变绝对看起来更好。 :) – Technext

回答

1

默认情况下,kubectl代理只接受来自localhost传入连接和IPv4和ipv6环回地址。
尝试在运行代理时设置--accept-hosts='.*',因此它开始接受来自任何地址的连接。
您可能还需要将--address标志设置为公用IP,因为默认值为127.0.0.1

更多详细信息在kubectl proxy docs

+0

感谢@Toresan的回复,但我很抱歉,因为我无法立即验证。当客户端使用Rancher设置Kubernetes时,我放弃了设置。如果我以后再设置手动方式,我会重新审视并尝试您的建议。感谢您抽出时间回复。 – Technext

+0

经过几天的搜索,这是我在整个互联网上发现的第一个实际工作,它允许远程计算机上的浏览器访问其他地方服务器上运行的仪表板。令人惊讶的是,看似最常见的用例完全没有记录。谢谢! – Brent212