如何从外部访问规范的kubernetes仪表板?

时间:2018-01-16 16:52:30

标签: ubuntu kubernetes kubectl

如何从外部网络/ IP访问规范的kubernetes仪表板? 有没有办法在外部公开仪表板服务,而不是从规范k8s集群节点的localhost浏览器访问?

2 个答案:

答案 0 :(得分:4)

The documentation has a guide如何做到这一点。

使用kubectl代理

kubectl proxy在您的计算机和Kubernetes API服务器之间创建代理服务器。默认情况下,它只能在本地访问(从启动它的计算机)。 启动本地代理服务器:

$ kubectl proxy

Starting to serve on 127.0.0.1:8001

启动代理服务器后,您应该可以从浏览器访问控制台。

要访问信息中心的HTTPS端点,请转到:http://localhost:8001/api/v1/namespaces/kube-system/services/https:kubernetes-dashboard:/proxy/

注意:不应使用kubectl proxy命令公开公开仪表板,因为它只允许HTTP连接。对于localhost和127.0.0.1以外的域,将无法登录。单击登录页面上的登录按钮后不会发生任何事情。

使用NodePort

这种访问仪表板的方式仅建议用于单节点设置中的开发环境。 修改kubernetes-dashboard服务。

$ kubectl -n kube-system edit service kubernetes-dashboard

您应该看到服务的yaml表示。更改类型:ClusterIP键入:NodePort并保存文件。如果已经更改,请转到下一步。

# Please edit the object below. Lines beginning with a '#' will be ignored,
# and an empty file will abort the edit. If an error occurs while saving this file will be
# reopened with the relevant failures.
#
apiVersion: v1
...
  name: kubernetes-dashboard
  namespace: kube-system
  resourceVersion: "343478"
  selfLink: /api/v1/namespaces/kube-system/services/kubernetes-dashboard-head
  uid: 8e48f478-993d-11e7-87e0-901b0e532516
spec:
  clusterIP: 10.100.124.90
  externalTrafficPolicy: Cluster
  ports:
  - port: 443
    protocol: TCP
    targetPort: 8443
  selector:
    k8s-app: kubernetes-dashboard
  sessionAffinity: None
  type: ClusterIP
status:
  loadBalancer: {}

接下来,我们需要检查暴露仪表板的端口。

$ kubectl -n kube-system get service kubernetes-dashboard
NAME                   CLUSTER-IP       EXTERNAL-IP   PORT(S)        AGE
kubernetes-dashboard   10.100.124.90   <nodes>       443:31707/TCP   21h

Dashboard已在端口31707(HTTPS)上公开。现在,您可以通过浏览器访问:https://<master-ip>:31707。通过执行master-ip可以找到kubectl cluster-info。通常它是127.0.0.1或您机器的IP,假设您的集群直接在机器上运行,执行这些命令。

如果您尝试在多节点群集上使用NodePort公开Dashboard,则必须找到运行Dashboard的节点的IP才能访问它。您无需访问https://<master-ip>:<nodePort>,而应访问https://<node-ip>:<nodePort>

API服务器

如果Kubernetes API服务器公开并可从外部访问,您可以直接访问仪表板:https://<master-ip>:<apiserver-port>/api/v1/namespaces/kube-system/services/https:kubernetes-dashboard:/proxy/

入口

也可以使用Ingress资源公开仪表板。例如

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
 name: kubernetes-dashboard-ingress
 namespace: kube-system
spec:
 rules:
   — host: kubernetes
     http:
       paths:
         — path: /ui
           backend:
             serviceName: kubernetes-dashboard
             servicePort: 80

答案 1 :(得分:1)

有(至少)两种方式从外界访问仪表板:

1)在您的开发计算机中运行kubectl proxy并访问地址:http://localhost:8001/api/v1/namespaces/kube-system/services/kubernetes-dashboard/proxy/#!/pod?namespace=default

2)使用LoadBalancer,IngressController,NodePort或其他方法,像对集群中的任何其他服务那样公开仪表板服务。