我可以通过指向特定服务器而不是本地主机的域名来访问我的 Kubernetes 仪表板吗

cod*_*diz 5 kubernetes kubernetes-dashboard typhoon-kubernetes

文档遵循 https://docs.aws.amazon.com/eks/latest/userguide/dashboard-tutorial.html

我可以设置仪表板并使用链接 http://localhost:8001/api/v1/namespaces/kubernetes-dashboard/services/https:kubernetes-dashboard:/proxy/#!/login 访问它

问题在于“每个用户都必须遵循相同的操作才能访问仪表板”

我想知道是否有某种方法可以通过域名访问仪表板,并且每个人都应该能够访问它,而无需进行太多预先设置。

Wil*_*.F. 3

我们有两种方法来公开仪表板,NodePort并且在LoadBalancer.

\n\n

我将展示这两种情况以及其中的一些优点和缺点。

\n\n
\n\n

type: NodePort

\n\n

这样您的仪表板将可以在https://<MasterIP>:<Port>.

\n\n
    \n
  • 我将从 Dashboard 已部署并作为 ClusterIP 运行(就像您的一样)开始。
  • \n
\n\n
$ kubectl get service kubernetes-dashboard -n kubernetes-dashboard\nNAME                   TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)    AGE\nkubernetes-dashboard   ClusterIP   10.0.11.223   <none>        80/TCP     11m\n
Run Code Online (Sandbox Code Playgroud)\n\n\n\n
$ kubectl patch svc kubernetes-dashboard -n kubernetes-dashboard -p \'{"spec": {"type": "NodePort"}}\'\nservice/kubernetes-dashboard patched\n
Run Code Online (Sandbox Code Playgroud)\n\n

注意:您还可以应用 YAML 格式,将字段更改type: ClusterIPtype: Nodeport,而不是我想展示一种直接方法kubectl patch使用 JSON 格式修补同一字段的直接方法。

\n\n
    \n
  • 现在让我们列出来查看新端口:
  • \n
\n\n
$ kubectl get service kubernetes-dashboard -n kubernetes-dashboard\nNAME                   TYPE       CLUSTER-IP    EXTERNAL-IP   PORT(S)         AGE\nkubernetes-dashboard   NodePort   10.0.11.223   <none>        443:31681/TCP   13m\n
Run Code Online (Sandbox Code Playgroud)\n\n

注意:在从外部集群访问之前,您必须启用节点的安全组以允许传入流量通过公开的端口,或者此处为GKE。\n 下面是我在 Google Cloud 上创建规则的示例,但相同的概念适用于埃克斯

\n\n
$ gcloud compute firewall-rules create test-node-port --allow tcp:31681\nCreating firewall...\xe2\xa0\xb9Created [https://www.googleapis.com/compute/v1/projects/owilliam/global/firewalls/test-node-port].                                                                 \nCreating firewall...done.                                                                                                                                                               \nNAME            NETWORK  DIRECTION  PRIORITY  ALLOW      DENY  DISABLED\ntest-node-port  default  INGRESS    1000      tcp:31681        False                                                                                                                                                               \n\n$ kubectl get nodes --output wide\nNAME                                 STATUS   ROLES    AGE   VERSION         INTERNAL-IP   EXTERNAL-IP\ngke-cluster-1-pool-1-4776b3eb-16t7   Ready    <none>   18d   v1.15.8-gke.3   10.128.0.13   35.238.162.157\n\n
Run Code Online (Sandbox Code Playgroud)\n\n
    \n
  • 我将使用它来访问它https://35.238.162.157:31681
  • \n
\n\n

在此输入图像描述

\n\n
\n\n

type: LoadBalancer

\n\n

这样您的仪表板将可以在https://IP.

\n\n
    \n
  • 使用LoadBalancer您的云提供商可以自动执行防火墙规则和端口转发并为其分配 IP。(根据您的计划,您可能需要支付额外费用)。

  • \n
  • 和以前一样,我删除了该服务并再次创建为 clusterIP:

  • \n
\n\n
$ kubectl get service kubernetes-dashboard -n kubernetes-dashboard\nNAME                   TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)   AGE\nkubernetes-dashboard   ClusterIP   10.0.2.196   <none>        443/TCP   15s\n\n$ kubectl patch svc kubernetes-dashboard -n kubernetes-dashboard -p \'{"spec": {"type": "LoadBalancer"}}\'\nservice/kubernetes-dashboard patched\n\n$ kubectl get service kubernetes-dashboard -n kubernetes-dashboard\nNAME                   TYPE           CLUSTER-IP   EXTERNAL-IP   PORT(S)         AGE\nkubernetes-dashboard   LoadBalancer   10.0.2.196   <pending>     443:30870/TCP   58s\n\n$ kubectl get service kubernetes-dashboard -n kubernetes-dashboard\nNAME                   TYPE           CLUSTER-IP   EXTERNAL-IP      PORT(S)         AGE\nkubernetes-dashboard   LoadBalancer   10.0.2.196   35.232.133.138   443:30870/TCP   11m\n
Run Code Online (Sandbox Code Playgroud)\n\n

注意:当您应用它时,EXTERNAL-IP 将处于<pending>状态,几分钟后应分配一个公共 IP,如上所示。

\n\n
    \n
  • 您可以使用以下方式访问它https://35.232.133.138
  • \n
\n\n

在此输入图像描述

\n\n
\n\n

安全考虑:

\n\n
    \n
  • 当公开时,您与仪表板的连接始终通过 HTTPS,您每次进入时都可能会收到有关自动生成的证书的通知,除非您将其更改为受信任的证书。您可以在这里找到更多信息

  • \n
  • 由于仪表板不会暴露太多,我建议使用公共 IP(或自定义 dns 名称,如果是 aws,即:*****.us-west-2.elb)保持访问。 amazonaws.com)。

  • \n
  • 如果您确实想集成到您的主域名,我建议将其置于您网站上的另一层身份验证之后。

  • \n
  • 新的访问仍然需要访问令牌,但没有人需要通过该过程来公开仪表板,您只需传递 IP/DNS 地址和令牌即可访问它。

  • \n
  • 该令牌具有集群管理员访问权限,因此请像保存 root 密码一样确保其安全。

  • \n
\n\n

如果您有任何疑问,请告诉我!

\n