从远程计算机上部署的kubernetes仪表板服务访问本地笔记本电脑时,无法访问站点

从远程计算机上部署的kubernetes仪表板服务访问本地笔记本电脑时,无法访问站点,kubernetes,dashboard,Kubernetes,Dashboard,当我试图从我的本地笔记本电脑访问Kubernetes仪表板服务时,我得到的信息是无法访问该站点 所遵循的程序: 我按照以下链接中的文档进行操作 我在我的主机上创建了一个主节点和一个工作节点的集群。每台机器都是ubuntu 16.04。我安装了kubectl,并从我运行Jenkins for ci/cd管道的控制虚拟机访问这个集群。从这个控制vm中,我绑定了clusterrole,并按照文档中的说明部署了Kubernetes仪表板 我使用kuectl命令(在集群外部)从我的控制虚拟机运行以下命令

当我试图从我的本地笔记本电脑访问Kubernetes仪表板服务时,我得到的信息是无法访问该站点

所遵循的程序:

我按照以下链接中的文档进行操作

我在我的主机上创建了一个主节点和一个工作节点的集群。每台机器都是ubuntu 16.04。我安装了kubectl,并从我运行Jenkins for ci/cd管道的控制虚拟机访问这个集群。从这个控制vm中,我绑定了clusterrole,并按照文档中的说明部署了Kubernetes仪表板

我使用kuectl命令(在集群外部)从我的控制虚拟机运行以下命令来部署默认仪表板服务:

我创建了具有以下内容的角色绑定yaml
dashboard adminuser.yaml

apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: admin-user
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: cluster-admin
subjects:
- kind: ServiceAccount
  name: admin-user
  namespace: kubernetes-dashboard
并使用以下命令创建了此文件:

 kubectl apply -f dashboard-adminuser.yaml
kubectl -n kubernetes-dashboard describe secret $(kubectl -n kubernetes-dashboard get secret | grep admin-user | awk '{print $1}')
使用以下命令访问令牌:

 kubectl apply -f dashboard-adminuser.yaml
kubectl -n kubernetes-dashboard describe secret $(kubectl -n kubernetes-dashboard get secret | grep admin-user | awk '{print $1}')
并运行以下命令为仪表板服务:

kubectl proxy
当我运行显示“从127.0.0.1:8001开始服务”的命令时

我试图通过在浏览器上放置以下URL来访问仪表板

但我得到的只是一个信息,即无法访问该网站

更新

现在,我正试图通过编辑仪表板服务类型到
节点端口
类型,使用节点端口机制进行访问。当我试图访问URL时,我会收到类似“您的连接不是私有的”这样的错误。我在下面添加截图


我哪里出错了?

只能从执行命令(kubectl代理)的机器上访问UI。在那台机器里试试

http://localhost:8001/api/v1/namespaces/kubernetes-dashboard/services/https:kubernetes-dashboard:/proxy/
编辑:

否则,使用nodeport机制访问它,而不使用kubectl代理

更新:

使用kubectl代理访问仪表板

运行
kubectl proxy
,然后访问

我为auth使用了一个令牌,现在我创建了一个令牌:

# Create the service account in the current namespace 
# (we assume default)
kubectl create serviceaccount my-dashboard-sa
# Give that service account root on the cluster
kubectl create clusterrolebinding my-dashboard-sa \
  --clusterrole=cluster-admin \
  --serviceaccount=default:my-dashboard-sa
# Find the secret that was created to hold the token for the SA
kubectl get secrets
# Show the contents of the secret to extract the token
kubectl describe secret my-dashboard-sa-token-xxxxx
通过公开的API服务器访问仪表板

在浏览器中使用此url
https://:/api/v1/namespace/kubernetes仪表板/services/https:kubernetes仪表板:/proxy/

这将导致以下错误:

{
  "kind": "Status",
  "apiVersion": "v1",
  "metadata": {

  },
  "status": "Failure",
  "message": "services \"https:kubernetes-dashboard:\" is forbidden: User \"system:anonymous\" cannot get resource \"services/proxy\" in API group \"\" in the namespace \"kube-system\"",
  "reason": "Forbidden",
  "details": {
    "name": "https:kubernetes-dashboard:",
    "kind": "services"
  },
  "code": 403
}
要解决上述错误,请应用以下yaml来配置RBAC:

kind: ClusterRole
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: kubernetes-dashboard-anonymous
rules:
- apiGroups: [""]
  resources: ["services/proxy"]
  resourceNames: ["https:kubernetes-dashboard:"]
  verbs: ["get", "list", "watch", "create", "update", "patch", "delete"]
- nonResourceURLs: ["/ui", "/ui/*", "/api/v1/namespaces/kube-system/services/https:kubernetes-dashboard:/proxy/*"]
  verbs: ["get", "list", "watch", "create", "update", "patch", "delete"]

---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: kubernetes-dashboard-anonymous
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: kubernetes-dashboard-anonymous
subjects:
- kind: User
  name: system:anonymous

您仍然需要kubeconfig或令牌才能访问。令牌可以通过上述机制创建。

您需要将服务类型更改为节点端口,才能从本地访问它

节点端口

这种访问仪表板的方式仅推荐用于单节点设置中的开发环境

编辑kubernetes仪表板服务

$kubectl-n kubernetes仪表板编辑服务kubernetes仪表板

您应该看到服务的yaml表示。将type:clustrep更改为type:NodePort并保存文件

apiVersion: v1
...
  name: kubernetes-dashboard
  namespace: kubernetes-dashboard
  resourceVersion: "343478"
  selfLink: /api/v1/namespaces/kubernetes-dashboard/services/kubernetes- 
  dashboard
  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
status:
  loadBalancer: {}
接下来,我们需要检查显示仪表板的端口

$ kubectl -n kubernetes-dashboard get service kubernetes-dashboard

NAME                   TYPE       CLUSTER-IP       EXTERNAL-IP   PORT(S)        
AGE
kubernetes-dashboard   NodePort   10.100.124.90   <nodes>       443:31707/TCP   
21h
$kubectl-n kubernetes仪表板获取服务kubernetes仪表板
名称类型群集IP外部IP端口
年龄
kubernetes仪表板节点端口10.100.124.90 443:31707/TCP
21小时
仪表板已在端口31707(HTTPS)上公开。现在,您可以通过以下浏览器访问它:
https://:31707
。可以通过执行kubectl cluster info找到主ip。通常是127.0.0.1或机器的IP,假设集群直接在执行这些命令的机器上运行


如果您试图在多节点集群上使用NodePort公开仪表板,则必须找出运行仪表板的节点的IP才能访问它。您不应该访问
https://:
而应该访问
https://:

公制服务器和仪表板吊舱中的日志说明了什么?@ArghyaSadhu-我没有找到仪表板的任何吊舱或服务。这是我的问题。当我运行
kubectl apply-f时https://raw.githubusercontent.com/kubernetes/dashboard/v2.0.0-beta8/aio/deploy/recommended.yaml
,我也没有收到任何错误。因为我在上面一步一步地添加了我实现的每个步骤。在运行kubectl代理之后,它显示开始在127.0.0.1:8001上服务。kubectl获取pods-n kubernetes仪表板应该为您提供pods,然后检查pods@ArghyaSadhu-当我尝试使用命令
kubectl get pods
时,没有列出这一点。现在我知道了,我更新了有问题的结果。这表明它处于运行状态。您能检查编辑的问题吗?这说明什么kubectl logs kubernetes-dashboard-5996555fd8-rdjn7-n kubernetes dashboard谢谢您的回答。在我看来,合适的是第二种选择。我现在通过编辑仪表板服务来使用nodeport机制。但是当我使用node ip:node port访问url时,我只收到“您的连接不是私有的”消息,这是一个隐私错误。如果您添加ca证书(自签名)由https端点nodeip:port呈现给您的系统受信任的ca证书,然后通信将通过https开始,您不会收到该错误。我不理解您所说的“由https端点nodeip:port呈现给系统”是什么意思。我需要添加哪个CA证书?。当我进入/etc/ssl/certs文件夹时,我可以看到.pem和.crt文件。您能为我澄清一下吗?我可以按照以下文档进行操作吗?我已经运行了kubectl代理。但是我将群集角色与服务帐户绑定并部署仪表板服务的计算机不是我的本地计算机。这是k8集群之外的一个远程Ubuntu vm,它只用于我的CI(Jenkins安装)。我没有权限