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

时间:2020-03-29 15:28:09

标签: 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

进行访问

与此相关的问题是“每个用户都必须按照相同的方式来访问仪表板”

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

2 个答案:

答案 0 :(得分:1)

我们有两种显示仪表板的方法,NodePortLoadBalancer中。

我将演示这两种情况,以及它们的一些优缺点。


type: NodePort

这样,您的仪表板将在https://<MasterIP>:<Port>中可用。

  • 我将从仪表盘开始,它已经被部署并以ClusterIP身份运行(就像您一样)。
$ kubectl get service kubernetes-dashboard -n kubernetes-dashboard
NAME                   TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)    AGE
kubernetes-dashboard   ClusterIP   10.0.11.223   <none>        80/TCP     11m
$ kubectl patch svc kubernetes-dashboard -n kubernetes-dashboard -p '{"spec": {"type": "NodePort"}}'
service/kubernetes-dashboard patched

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

  • 现在让我们列出以查看新端口:
$ kubectl get service kubernetes-dashboard -n kubernetes-dashboard
NAME                   TYPE       CLUSTER-IP    EXTERNAL-IP   PORT(S)         AGE
kubernetes-dashboard   NodePort   10.0.11.223   <none>        443:31681/TCP   13m

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

$ gcloud compute firewall-rules create test-node-port --allow tcp:31681
Creating firewall...⠹Created [https://www.googleapis.com/compute/v1/projects/owilliam/global/firewalls/test-node-port].                                                                 
Creating firewall...done.                                                                                                                                                               
NAME            NETWORK  DIRECTION  PRIORITY  ALLOW      DENY  DISABLED
test-node-port  default  INGRESS    1000      tcp:31681        False                                                                                                                                                               

$ kubectl get nodes --output wide
NAME                                 STATUS   ROLES    AGE   VERSION         INTERNAL-IP   EXTERNAL-IP
gke-cluster-1-pool-1-4776b3eb-16t7   Ready    <none>   18d   v1.15.8-gke.3   10.128.0.13   35.238.162.157

  • 我将使用https://35.238.162.157:31681访问它:

enter image description here


type: LoadBalancer

这样,您的仪表板将在https://IP中可用。

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

  • 与以前相同,我删除了该服务,然后再次将其创建为clusterIP:

$ kubectl get service kubernetes-dashboard -n kubernetes-dashboard
NAME                   TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)   AGE
kubernetes-dashboard   ClusterIP   10.0.2.196   <none>        443/TCP   15s

$ kubectl patch svc kubernetes-dashboard -n kubernetes-dashboard -p '{"spec": {"type": "LoadBalancer"}}'
service/kubernetes-dashboard patched

$ kubectl get service kubernetes-dashboard -n kubernetes-dashboard
NAME                   TYPE           CLUSTER-IP   EXTERNAL-IP   PORT(S)         AGE
kubernetes-dashboard   LoadBalancer   10.0.2.196   <pending>     443:30870/TCP   58s

$ kubectl get service kubernetes-dashboard -n kubernetes-dashboard
NAME                   TYPE           CLUSTER-IP   EXTERNAL-IP      PORT(S)         AGE
kubernetes-dashboard   LoadBalancer   10.0.2.196   35.232.133.138   443:30870/TCP   11m

注意:当您应用它时,EXTERNAL-IP将处于<pending>状态,几分钟后,应分配一个公共IP,如您在上面看到的那样。

  • 您可以使用https://35.232.133.138来访问它:

enter image description here


安全注意事项:

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

  • 由于仪表板的暴露程度并不高,因此我建议您使用公共IP(或使用aws的自定义dns名称,即*****。us-west)保留访问权限-2.elb.amazonaws.com)。

  • 如果您真的想集成到您的主域名,我建议您将该域名放在您网站的另一层身份验证之后。

  • 新的访问仍将需要访问令牌,但是没有人需要经过该过程即可显示仪表板,您只需传递IP / DNS地址和令牌即可访问它。

  • 此令牌具有“群集管理员访问权限”,因此请保持root用户密码的安全性。

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

答案 1 :(得分:0)

最深层的问题是身份验证。如果您希望仪表板为用户遵守Kubernetes RBAC规则,则它需要他们的K8信用,而且这些信用通常很复杂。对于EKS,它基于您的AWS凭证。有些人只是在仪表板上放置了一组静态权限,然后在其前面放置了其他一些常规的Web身份验证。