后跟的文档 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
进行访问与此相关的问题是“每个用户都必须按照相同的方式来访问仪表板”
我想知道是否有某种方式可以通过域名访问仪表板,并且每个人都应该能够访问仪表板而无需进行很多预先设置。
答案 0 :(得分:1)
我们有两种显示仪表板的方法,NodePort
和LoadBalancer
中。
我将演示这两种情况,以及它们的一些优缺点。
type: NodePort
这样,您的仪表板将在https://<MasterIP>:<Port>
中可用。
$ 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
访问它: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
来访问它:安全注意事项:
您与仪表板的连接在公开时始终是通过HTTPS进行的,除非您将其更改为受信任的证书,否则每次输入时都可能会收到有关自动生成的证书的通知。您可以找到更多here
由于仪表板的暴露程度并不高,因此我建议您使用公共IP(或使用aws的自定义dns名称,即*****。us-west)保留访问权限-2.elb.amazonaws.com)。
如果您真的想集成到您的主域名,我建议您将该域名放在您网站的另一层身份验证之后。
新的访问仍将需要访问令牌,但是没有人需要经过该过程即可显示仪表板,您只需传递IP / DNS地址和令牌即可访问它。
此令牌具有“群集管理员访问权限”,因此请保持root用户密码的安全性。
如果您有任何疑问,请告诉我!
答案 1 :(得分:0)
最深层的问题是身份验证。如果您希望仪表板为用户遵守Kubernetes RBAC规则,则它需要他们的K8信用,而且这些信用通常很复杂。对于EKS,它基于您的AWS凭证。有些人只是在仪表板上放置了一组静态权限,然后在其前面放置了其他一些常规的Web身份验证。