无法打开 Kubernetes 仪表板页面

无法打开 Kubernetes 仪表板页面

我正在尝试使用以下命令在 Ubuntu 20.04 TLS 上安装带有仪表板的 Kubernetes 集群:

Swapoff -a
Remove following line from /etc/fstab
/swap.img       none    swap    sw      0       0

sudo apt update
sudo apt install docker.io
sudo systemctl start docker
sudo systemctl enable docker

sudo apt install apt-transport-https curl
curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add
echo "deb https://apt.kubernetes.io/ kubernetes-xenial main" >> ~/kubernetes.list
sudo mv ~/kubernetes.list /etc/apt/sources.list.d
sudo apt update
sudo apt install kubeadm kubelet kubectl kubernetes-cni

sudo kubeadm init --pod-network-cidr=192.168.0.0/16

mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/k8s-manifests/kube-flannel-rbac.yml


kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.5.0/aio/deploy/recommended.yaml

kubectl proxy --address 192.168.1.133 --accept-hosts '.*'

但当我打开http://192.168.1.133:8001/api/v1/namespaces/default/services/https:kubernetes-dashboard:https/proxy

我得到:

{
  "kind": "Status",
  "apiVersion": "v1",
  "metadata": {},
  "status": "Failure",
  "message": "services \"kubernetes-dashboard\" not found",
  "reason": "NotFound",
  "details": {
    "name": "kubernetes-dashboard",
    "kind": "services"
  },
  "code": 404
}

我尝试列出这些豆荚:

root@ubuntukubernetis1:~# kubectl get pods --all-namespaces
NAMESPACE              NAME                                         READY   STATUS              RESTARTS       AGE
kube-flannel           kube-flannel-ds-f6bwx                        0/1     Error               11 (29s ago)   76m
kube-system            coredns-6d4b75cb6d-rk4kq                     0/1     ContainerCreating   0              77m
kube-system            coredns-6d4b75cb6d-vkpcm                     0/1     ContainerCreating   0              77m
kube-system            etcd-ubuntukubernetis1                       1/1     Running             1 (52s ago)    77m
kube-system            kube-apiserver-ubuntukubernetis1             1/1     Running             1 (52s ago)    77m
kube-system            kube-controller-manager-ubuntukubernetis1    1/1     Running             1 (52s ago)    77m
kube-system            kube-proxy-n6ldq                             1/1     Running             1 (52s ago)    77m
kube-system            kube-scheduler-ubuntukubernetis1             1/1     Running             1 (52s ago)    77m
kubernetes-dashboard   dashboard-metrics-scraper-7bfdf779ff-sdnc8   0/1     Pending             0              75m
kubernetes-dashboard   dashboard-metrics-scraper-8c47d4b5d-2sxrb    0/1     Pending             0              59m
kubernetes-dashboard   kubernetes-dashboard-5676d8b865-fws4j        0/1     Pending             0              59m
kubernetes-dashboard   kubernetes-dashboard-6cdd697d84-nmpv2        0/1     Pending             0              75m
root@ubuntukubernetis1:~#

您知道我该如何解决这个问题吗?

答案1

这已得到答复这里。在此发布解决方案,以造福社区成员。

您正在查询的 URL(http://192.168.1.133:8001/api/v1/namespaces/default/services/https:kubernetes-dashboard:https/proxy) 是错的。

根据您应用的最后一个 yaml 文件(https://raw.githubusercontent.com/kubernetes/dashboard/v2.5.0/aio/deploy/recommended.yaml),正如我们从 kubectl get pods -A 中猜测到的:kubernetes-dashboard 服务位于 kubernetes-dashboard 命名空间中。不是默认命名空间。

虽然如果你只是想连接 kubernetes 仪表板:而不是kubectl proxy运行命令,我会选择kubectl port-forward -n kubernetes-dashboard deploy/kubernetes-dashboard 8443:8443,然后打开我的浏览器https://localhost:8443

然后,就是您的 SDN 的情况。在您的 中kubectl get pods,我们可以看到 kube-flannel 命名空间中的 kube-flannel pod 处于错误状态。

查看此容器的日志,并尝试找出它无法启动的原因(kubectl logs -n kube-flannel kube-flannel-ds-xxxx -p)。

我已经好几年没有设置过 Flannel 了,不过我记得除了应用它们的 RBAC 和守护进程集 yamls 之外,我还必须修补节点,为它们分配 CIDR。例如:(kubectl patch node my-node-1 -p '{ "spec": { "podCIDR": "10.32.3.0/24" } }' --type merge每个 podCIDR 必须是唯一的,每个节点都有自己的托管 Pod 范围。

如果我没记错的话,每个 podCIDR 都必须是 flannel 的 net-conf.json 网络子网的子集——请查看安装 flannel 时创建的 ConfigMap)。

截至您上次评论时:错误告诉我们以下内容

Failed to create SubnetManager: error retrieving pod spec for 'kube-flannel/kube-flannel-ds-f6bwx': pods "kube-flannel-ds-f6bwx" is forbidden: User "system:serviceaccount:kube-flannel:flannel" cannot get resource "pods" in API group "" in the namespace "kube-flannel"

回顾您用于设置 flannel 的文件,您提到了一个在 kube-flannel 命名空间中设置工作负载的文件,然后是这个 rbac 文件,为 kube-system 中的服务帐户创建 clusterrolebinding。要修复您的 SDN,您可能需要创建以下内容:

kind: ClusterRoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: flannel-fix
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: flannel
subjects:
  - kind: ServiceAccount
    name: flannel
    namespace: kube-flannel

需要注意的是:kube-flannel-rbac 在你的情况下不是必需的。如果你从其旧版清单中安装了 flannel,那么它就是必需的(https://github.com/flannel-io/flannel/blob/master/Documentation/k8s-manifests/kube-flannel-legacy.yml)。

在你的情况下,我们正在修复的 ClusterRoleBinding 应该已经正确创建,仅应用https://github.com/flannel-io/flannel/blob/master/Documentation/kube-flannel.yml

相关内容