从远程客户端访问kubernetes web ui

从远程客户端访问kubernetes web ui,kubernetes,kubernetes-dashboard,Kubernetes,Kubernetes Dashboard,我在Ubuntu服务器上运行了一个集群。我通过端口80/443在集群中运行的服务器上提供web内容。我仅通过ssh访问服务器本身,因此根本没有图形界面 现在我想访问该群集的。在研究过程中,我发现有消息称,不建议prod环境每次远程访问WebUI。本指南仅介绍如何使用kubectl proxy向本地主机公开仪表板 是否有一种解决方案或或多或少通用的方式来访问服务器上运行的集群的仪表板?kubectl proxy工作得很好。否则,您还可以将kubernetes仪表板更改为loadbalancer/n

我在Ubuntu服务器上运行了一个集群。我通过端口80/443在集群中运行的服务器上提供web内容。我仅通过ssh访问服务器本身,因此根本没有图形界面

现在我想访问该群集的。在研究过程中,我发现有消息称,不建议prod环境每次远程访问
WebUI
。本指南仅介绍如何使用
kubectl proxy
向本地主机公开仪表板


是否有一种解决方案或或多或少通用的方式来访问服务器上运行的集群的仪表板?

kubectl proxy
工作得很好。否则,您还可以将
kubernetes仪表板
更改为loadbalancer/nodeport,并通过该仪表板访问集群

如果您使用的是loadbalancer,并且您与AWS或Azure等云提供商合作,那么您可能可以设置安全组以允许在某些特定ip范围内进行访问


但是,我要说的是,kubectl proxy在大多数情况下已经足够好了。

如果您想通过外部ip地址访问仪表板,您可以编辑仪表板服务,如果您有外部LB提供商(如GCP或AWS),可以将类型更改为LoadBalancer。 要执行此操作,请编辑kubernetes仪表板服务

# kubectl -n kube-system edit service kubernetes-dashboard
您应该看到服务的yaml表示。将类型:ClusterIP更改为类型:LoadBalancer并保存文件。如果已经更改,请转至下一步

# 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 # <-- Change to LoadBalancer
status:
  loadBalancer: {}
#请编辑下面的对象。以“#”开头的行将被忽略,
#空文件将中止编辑。如果在保存此文件时发生错误,将删除此文件
#在出现相关故障时重新打开。
#
版本:v1
...
名称:kubernetes仪表板
名称空间:kube系统
资源版本:“343478”
selfLink:/api/v1/namespace/kube system/services/kubernetes仪表板头
uid:8e48f478-993d-11e7-87e0-901b0e532516
规格:
集群:10.100.124.90
外部流量策略:群集
端口:
-港口:443
协议:TCP
目标港:8443
选择器:
k8s应用程序:kubernetes仪表板
会话相关性:无
类型:集群#2件事;
1.要使用浏览器(本地计算机)直接访问,k8s群集必须位于同一网络域中。
2.如果您不在项目#1上,请使用windows RDP访问它并使用浏览器

...
spec:
  clusterIP: 10.104.126.244
  externalIPs:
  - 192.168.64.1
  externalTrafficPolicy: Cluster
  ports:
  - nodePort: 31180
    port: 443
    protocol: TCP
    targetPort: 8443
  selector:
    k8s-app: kubernetes-dashboard
  sessionAffinity: None
  type: LoadBalancer
status:
上述kubernetes仪表板服务将运行,方法是:, 其中192.168.64.1是Kubernetes控制器的IP地址, 然而,也有一些警告

您需要使用旧浏览器来访问它并接受安全异常

然后跑

kubectl-n kube系统获取机密

并查找您的
replicaset控制器令牌kzpmc

然后跑

$kubectl-n kube系统描述一套控制器令牌kzpmc

并复制底部的长标记

Name:       replicaset-controller-token-kzpmc
Namespace:  kube-system
Labels:     <none>
Annotations:    kubernetes.io/service-account.name=replicaset-controller
        kubernetes.io/service-account.uid=d0d93741-96c5-11e7-8245-901b0e532516

Type:   kubernetes.io/service-account-token

Data
====
ca.crt:     1025 bytes
namespace:  11 bytes
token: eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJrdWJlcm5ldGVzL3 
Name:replicaset控制器令牌kzpmc
名称空间:kube系统
标签:
注释:kubernetes.io/service account.name=replicaset控制器
kubernetes.io/service account.uid=d0d93741-96c5-11e7-8245-901b0e532516
类型:kubernetes.io/service-account-token
数据
====
ca.crt:1025字节
名称空间:11字节
代币:eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJrdWJlcm5ldGVzL3

假设集群上已经部署了K8s仪表板,通过运行以下命令将所有请求从Amazon EC2实例localhost端口转发到Kubernetes仪表板端口:

kubectl port-forward svc/kubernetes-dashboard -n kubernetes-dashboard 6443:443
ssh -i <EC2KeyPair.pem> ec2-user@<IP> -L 6443:127.0.0.1:6443
然后,要使用SSH隧道从本地计算机访问端口,请运行以下命令:

kubectl port-forward svc/kubernetes-dashboard -n kubernetes-dashboard 6443:443
ssh -i <EC2KeyPair.pem> ec2-user@<IP> -L 6443:127.0.0.1:6443
现在可以打开
https://127.0.0.1:6443
在浏览器窗口中访问k8s仪表板


有关详细信息,请参阅

Oh Ok,但如何从我的家用计算机访问服务器上暴露于localhost的仪表板?@elp
kubectl proxy--address=INTERNAL_server_IP_address_HERE
--accepts host=.*仪表板的编写方式拒绝通过未经中断的连接与您交谈,除非是本地主机。这意味着您需要正确设置证书才能使用它。一旦你做到了这一点,它就会起作用。为dashboard设置证书与为任何其他web应用程序设置证书没有什么不同。URL不仅仅是
https://IPADDRESS
?在这种方法之后,我仍然无法点击仪表板。