访问K8S仪表板的正确方法是什么?

时间:2017-12-29 05:40:28

标签: https kubernetes dashboard

问题

目前尚不清楚如何使用HTTPS访问仪表板并且无法找到明确的文档(它只是告诉使用kubectl代理)。那么使用HTTPS访问仪表板的方式是什么?

Kubernetes Dashboard GitHub告诉:

  

不推荐使用快捷方式http://localhost:8001/ui。使用上面显示的完整代理URL。

K8S Dashboard Recommended SetupK8S Dashboard FAQ没有说明如何在没有代理的情况下访问仪表板。

  

我通过HTTPS访问信息中心

  / ui重定向不适用于HTTPS的原因是它尚未在核心存储库中更新。您可以跟踪https://github.com/kubernetes/kubernetes/pull/53046#discussion_r145338754以找出合并的时间。可能在K8S 1.8.3+之前不可用。   

  我们的文档中提供了可用于访问仪表板的正确链接。检查访问仪表板以了解更多信息。

但是,kubernetes-dashboard.yaml清单将服务端点定义到仪表板,如下所示:

kind: Service
apiVersion: v1
metadata:
  labels:
    k8s-app: kubernetes-dashboard
  name: kubernetes-dashboard
  namespace: kube-system
spec:
  ports:
    - port: 443
      targetPort: 8443
  selector:
    k8s-app: kubernetes-dashboard

分配的群集IP(在我的环境中)低于。

# kubectl get svc -n kube-system
NAME                   TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)         AGE
kubernetes-dashboard   ClusterIP   10.101.199.14   <none>        443/TCP         4h

只需创建一个到10.101.199.14:443的SSH隧道,然后访问它(https://localhost:8001)即可显示仪表板。

enter image description here

所以,基本上,没有必要使用kubectl代理并直接访问clusterIP:443是使用HTTPS访问仪表板的方法吗?

请建议哪里有关于如何使用K8S仪表板的最新和准确的文档。

环境

# kubectl version
Client Version: version.Info{Major:"1", Minor:"9", GitVersion:"v1.9.0", GitCommit:"925c127ec6b946659ad0fd596fa959be43f0cc05", GitTreeState:"clean", BuildDate:"2017-12-15T21:07:38Z", GoVersion:"go1.9.2", Compiler:"gc", Platform:"linux/amd64"}
Server Version: version.Info{Major:"1", Minor:"9", GitVersion:"v1.9.0", GitCommit:"925c127ec6b946659ad0fd596fa959be43f0cc05", GitTreeState:"clean", BuildDate:"2017-12-15T20:55:30Z", GoVersion:"go1.9.2", Compiler:"gc", Platform:"linux/amd64"}

3 个答案:

答案 0 :(得分:2)

据我所知,您不希望将k8s仪表板暴露给外部世界因为它是一种图形化的方式来访问您的k8s集群,这就是为什么k8s-dashboard的服务类型是clusterIP而不是LoadBalancer或NodePort( Minikube使用它。)

现在如果您想要访问仪表板而不将其暴露给外部世界。您在问题中描述了两种方式。

  • Kubectl代理(它为kube-api服务器创建HTTP代理)
  • Kubectl port-forward(它创建到k8s-dashboard pod的TCP代理)

答案 1 :(得分:1)

由于没有时间测试Suresh的建议,现在用于下面。

获取kubernetes-dashboard服务帐户令牌(给定集群管理员角色)。

$ kubectl get secret -n kube-system | grep kubernetes-dashboard
kubernetes-dashboard-token-42b78                 kubernetes.io/service-account-token   3         1h

$ kubectl describe secret kubernetes-dashboard-token-42b78 -n kube-system
Name:         kubernetes-dashboard-token-42b78
Namespace:    kube-system
Labels:       <none>
Annotations:  kubernetes.io/service-account.name=kubernetes-dashboard
              kubernetes.io/service-account.uid=36347792-ecdf-11e7-9ca8-06bb783bb15c

Type:  kubernetes.io/service-account-token

Data
====
ca.crt:     1025 bytes
namespace:  11 bytes
token:    <TOKEN>

启动SSH隧道。

ssh -L localhost:8001:172.31.4.117:6443 centos@<K8SServer>

使用Chrome ModHeader扩展程序发送行标记令。

enter image description here

通过SSH隧道(本地端口8001)访问API服务器端点。

https://localhost:8001/api/v1/namespaces/kube-system/services/https:kubernetes-dashboard:/proxy

enter image description here

答案 2 :(得分:0)

对于那些在创建过程中被status-code 403 coredns-容器卡住的人,请尝试为您的集群安装Pod Network插件:

Calico例如:

kubectl apply -f https://docs.projectcalico.org/v3.8/manifests/calico.yaml

来源:https://kubernetes.io/fr/docs/setup/independent/create-cluster-kubeadm/