我在Ubuntu服务器上运行了一个集群。我通过端口80/443在群集中运行的服务器上提供Web内容。我只能通过ssh
访问服务器本身,因此根本没有图形界面。
现在,我要访问该集群的kubernetes web ui。在研究期间,我发现有消息人士说,不建议在产品环境中使用每个远程访问来访问web ui
。这些指南仅涉及使用kubectl proxy
将仪表板公开给localhost。
是否有解决方案或某种或多或少的通用方法来访问服务器上运行的集群的仪表板?
答案 0 :(得分:0)
kubectl proxy
效果很好。否则,您也可以将kubernetes-dashboard
更改为负载均衡器/节点端口,并通过该端口访问群集。
如果您使用的是负载均衡器,并且使用的是AWS或Azure之类的云提供商,则可以设置安全组以允许在某些特定ip范围内进行访问。
但是,我会说kubectl proxy
在大多数情况下都足够好。
答案 1 :(得分:0)
如果您要通过外部IP地址访问仪表板,则可以编辑仪表板服务,如果您具有外部LB提供程序(例如GCP或AWS),则可以将类型更改为LoadBalancer。
为此,请执行Edit kubernetes-dashboard
服务。
# 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: {}
然后运行以下命令以查看Kubernetes Dashboard服务的外部IP地址
# kubectl -n kube-system get service kubernetes-dashboard
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes-dashboard LoadBalancer 10.23.252.164 <external-ip> 443:31720/TCP 26d
然后浏览https://<external-ip>
来查看Web UI
您还可以将服务公开为NodePort,以通过子网访问WEB UI
答案 2 :(得分:0)
2件事; 1.要使用浏览器(本地计算机)直接访问,k8s群集必须位于同一网络域中。 2.如果您不在项目#1上,请使用Windows RDP并使用浏览器进行访问。
答案 3 :(得分:0)
...
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-dashboard-service将可以运行,方法是转到https://192.168.64.1:31180, 其中192.168.64.1是您的Kubernetes Controller的IP地址, 但是有一些警告。
您需要使用旧的浏览器来访问它并接受安全例外。
然后运行
kubectl -n kube-system get secret
然后查找您的replicaset-controller-token-kzpmc
然后运行
$ kubectl -n kube-system describe secrets replicaset-controller-token-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
答案 4 :(得分:0)
假设 K8s 控制面板已部署在您的集群上,通过运行以下命令将所有请求从您的 Amazon EC2 实例本地主机端口转发到 Kubernetes 控制面板端口:
kubectl port-forward svc/kubernetes-dashboard -n kubernetes-dashboard 6443:443
然后,要使用 SSH 隧道从本地计算机访问端口,请运行以下命令:
ssh -i <EC2KeyPair.pem> ec2-user@<IP> -L 6443:127.0.0.1:6443
如果您从 AWS EC2 访问,请提供您的 PEM 文件名和 IP。例如,ssh -i "demo.pem" ec2-user@ec2-34-207-214-53.compute-1.amazonaws.com -L 6443:127.0.0.1:6443
此后,从您的 EC2 实例中 exit
并运行:
ssh -i "demo.pem" ec2-user@ec2-34-207-214-53.compute-1.amazonaws.com -L 6443:127.0.0.1:6443
现在可以在浏览器窗口中打开 https://127.0.0.1:6443
以访问 k8s 仪表板
有关详细信息,请参阅https://aws.amazon.com/premiumsupport/knowledge-center/eks-cluster-kubernetes-dashboard/