我使用kubeadm工具进行了K8s(1.11)集群。它是集群中的1个主节点和1个节点。
我在那里应用了仪表板UI。 kubectl创建-f https://raw.githubusercontent.com/kubernetes/dashboard/master/src/deploy/recommended/kubernetes-dashboard.yaml
创建的服务帐户(此链接后:https://github.com/kubernetes/dashboard/wiki/Creating-sample-user)
apiVersion: v1 kind: ServiceAccount metadata: name: admin-user namespace: kube-system
和
apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRoleBinding
metadata:
name: admin-user
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: cluster-admin
subjects:
- kind: ServiceAccount
name: admin-user
namespace: kube-system
启动kube代理:kubectl proxy --address 0.0.0.0 --accept-hosts '.*'
然后使用以下网址从远程主机访问仪表板:http://<k8s master node IP>:8001/api/v1/namespaces/kube-system/services/https:kubernetes-dashboard:/proxy/#!/login
它要求登录令牌:使用以下命令获得令牌:kubectl -n kube-system describe secret $(kubectl -n kube-system get secret | grep admin-user | awk '{print $1}')
在浏览器中复制并应用令牌之后。它没有登录。它也没有显示身份验证错误…不确定这是什么错误吗?我的令牌错误还是我的kube proxy命令错误?
答案 0 :(得分:4)
我按照您发布的内容重新创建了所有步骤。
结果是问题出在<k8s master node IP>
中,在这种情况下,您应该使用localhost。因此,要访问正确的仪表板,您必须使用:
启动kubectl代理时-在主节点上创建到apiserver的隧道。默认情况下,仪表板以ServiceType:ClusterIP开头。在此模式下,主节点上的端口未打开,这就是您无法在“主节点IP”上访问该端口的原因。如果要使用主节点IP,则必须将ServiceType更改为NodePort。
您必须删除旧服务并通过将服务类型更改为NodePort来更新配置,如下例所示(请注意,由于默认情况下假定使用ClusterIP,因此不存在)。
创建一个新的Yaml文件名newservice.yaml
---
# ------------------- Dashboard Service ------------------- #
kind: Service
apiVersion: v1
metadata:
labels:
k8s-app: kubernetes-dashboard
name: kubernetes-dashboard
namespace: kube-system
spec:
type: NodePort
ports:
- port: 443
targetPort: 8443
selector:
k8s-app: kubernetes-dashboard
删除旧服务
kubectl delete service kubernetes-dashboard -n kube-system
应用新服务
kubectl apply -f newservice.yaml
运行描述服务
kubectl describe svc kubernetes-dashboard -n kube-system | grep "NodePort"
您可以将该端口与主节点的IP地址一起使用
Type: NodePort
NodePort: <unset> 30518/TCP
http://<k8s master node IP>:30518/api/v1/namespaces/kube-system/services/https:kubernetes-dashboard:/proxy/#!/login
请注意,端口号是随机生成的,您的端口号可能会有所不同。