首页 > 解决方案 > Kubernetes v1.12 仪表板正在运行,但通过 api 服务器代理访问它时发生超时

问题描述

链接:Kubernetes v1.12 仪表板正在运行,但通过 api 服务器代理访问时发生超时 开始时间:2018-12-01 标题:Kubernetes v1.12 仪表板正在运行,但通过 api 服务器代理访问时发生超时

正文:我有 Windows 10 家庭版(1803 更新)主机、Virtual Box 5.22、2 台访客 ubuntu 18.04.1 服务器。每个访客有 2 个网络:NAT(主机 IP 10.0.2.15)和与网关 IP 192.168.151.1 共享的仅主机。我设置IP:

  1. 对于 k8s 大师(ubuk8sma) - 192.168.151.21
  2. 对于工人 1 (ubuk8swrk1) - 192.168.151.22

我保持 docker 原样,版本是 18.09.0。我在 master 和 worker 上安装了 k8s 版本 stable-1.12。对于主初始化是:

K8S_POD_CIDR='10.244.0.0/16'
K8S_IP_ADDR='192.168.151.21'
K8S_VER='stable-1.12' # or latest
sudo kubeadm init --pod-network-cidr=${K8S_POD_CIDR} --apiserver-advertise-address=${K8S_IP_ADDR} --kubernetes-version ${K8S_VER} --ignore-preflight-errors=all

为什么我设置“忽略错误”标志:

[错误系统验证]:不支持的 docker 版本:18.09.0

我不愿意重新安装完全兼容 k8s 的 docker 版本(可能不是很聪明的举动,只是我通常渴望尝试最新的东西)。

对于 CNI,我安装了法兰绒网络:

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

安装 worker1 节点后,状态如下:

u1@ubuk8sma:~$ kubectl get nodes

NAME         STATUS   ROLES    AGE    VERSION
ubuk8sma     Ready    master   6d     v1.12.2
ubuk8swrk1   Ready    <none>   4d1h   v1.12.2

没有出现大问题。接下来我想要可视化这个漂亮的 k8s 捆绑生态系统,所以我开始安装 k8s 仪表板。如果可能,我遵循“默认”路径,零干预。我使用了这个 yaml:

kubectl create -f https://raw.githubusercontent.com/kubernetes/dashboard/master/src/deploy/recommended/kubernetes-dashboard.yaml

从基本层面看,它看起来像是已安装、部署到工作 Pod、正在运行。来自 pod 列表信息:

u1@ubuk8sma:~$ kubectl get all --namespace=kube-system

NAME                                        READY   STATUS    RESTARTS   AGE
pod/coredns-576cbf47c7-4tzm9                1/1     Running   5          6d
pod/coredns-576cbf47c7-tqtpw                1/1     Running   5          6d
pod/etcd-ubuk8sma                           1/1     Running   7          6d
pod/kube-apiserver-ubuk8sma                 1/1     Running   7          6d
pod/kube-controller-manager-ubuk8sma        1/1     Running   11         6d
pod/kube-flannel-ds-amd64-rt442             1/1     Running   3          4d1h
pod/kube-flannel-ds-amd64-zx78x             1/1     Running   5          6d
pod/kube-proxy-6b6mc                        1/1     Running   6          6d
pod/kube-proxy-zcchn                        1/1     Running   3          4d1h
pod/kube-scheduler-ubuk8sma                 1/1     Running   10         6d
pod/kubernetes-dashboard-77fd78f978-crl7b   1/1     Running   1          2d1h

NAME                           TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)         AGE
service/kube-dns               ClusterIP   10.96.0.10      <none>        53/UDP,53/TCP   6d
service/kubernetes-dashboard   ClusterIP   10.103.36.134   <none>        443/TCP         2d1h

NAME                                     DESIRED   CURRENT   READY   UP-TO-DATE   AVAILABLE   NODE SELECTOR                     AGE
daemonset.apps/kube-flannel-ds-amd64     2         2         2       2            2           beta.kubernetes.io/arch=amd64     6d
...
daemonset.apps/kube-proxy                2         2         2       2            2           <none>                            6d

NAME                                   DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/coredns                2         2         2            2           6d
deployment.apps/kubernetes-dashboard   1         1         1            1           2d1h

NAME                                              DESIRED   CURRENT   READY   AGE
replicaset.apps/coredns-576cbf47c7                2         2         2       6d
replicaset.apps/kubernetes-dashboard-77fd78f978   1         1         1       2d1h

我为 API 服务器和仪表板服务验证启动了代理:kubectl proxy

API 服务器的版本检查:

u1@ubuk8sma:~$ curl http://localhost:8001/version
{
  "major": "1",
  "minor": "12",
  "gitVersion": "v1.12.2",
  "gitCommit": "17c77c7898218073f14c8d573582e8d2313dc740",
  "gitTreeState": "clean",
  "buildDate": "2018-10-24T06:43:59Z",
  "goVersion": "go1.10.4",
  "compiler": "gc",
  "platform": "linux/amd64"
}

这是我写这个问题的问题:

u1@ubuk8sma:~$ curl "http://localhost:8001/api/v1/namespaces/kube-system/services/https:kubernetes-dashboard:/proxy/"
Error: 'dial tcp 10.244.1.8:8443: i/o timeout'
Trying to reach: 'https://10.244.1.8:8443/'

Pod 信息片段:

status:   
  conditions:   
  - lastProbeTime: null   
    lastTransitionTime: 2018-11-29T07:16:04Z   
    status: "True"
    type: Initialized
  - lastProbeTime: null
    lastTransitionTime: 2018-11-30T06:53:24Z
    status: "True"
    type: Ready
  - lastProbeTime: null
    lastTransitionTime: 2018-11-30T06:53:24Z
    status: "True"
    type: ContainersReady
  - lastProbeTime: null
    lastTransitionTime: 2018-11-29T07:16:04Z
    status: "True"
    type: PodScheduled
  containerStatuses:
  - containerID: docker://fb0937959c7680046130e670c483877e4c0f1854870cb0b20ed4fe066d72df18
    image: k8s.gcr.io/kubernetes-dashboard-amd64:v1.10.0
    imageID: docker-pullable://k8s.gcr.io/kubernetes-dashboard-amd64@sha256:1d2e1229a918f4bc38b5a3f9f5f11302b3e71f8397b492afac7f273a0008776a
    lastState:
      terminated:
        containerID: docker://f85e1cc50f59adbd8a13d42694aef7c5e726c07b3d852a26288c4bfc1124c718
        exitCode: 2
        finishedAt: 2018-11-30T06:53:21Z
        reason: Error
        startedAt: 2018-11-29T07:16:07Z
    name: kubernetes-dashboard
    ready: true
    restartCount: 1
    state:
      running:
        startedAt: 2018-11-30T06:53:23Z
  hostIP: 10.0.2.15
  phase: Running
  podIP: 10.244.1.8
  qosClass: BestEffort
  startTime: 2018-11-29T07:16:04Z

Docker 检查 worker1 节点:

CONTAINER ID    IMAGE                   COMMAND                                                                                            CREATED             STATUS                   NAMES
fb0937959c...   sha256:0dab2435c100...  "/dashboard --insecure-bind-address=0.0.0.0 --bind-address=0.0.0.0 --auto-generate-certificates"   27 hours ago        Up 27 hours              k8s_kubernetes-dashboard_kube...

试图检查 Pod 日志,没有运气:

DASHBOARD_POD_NAME='kubernetes-dashboard-77fd78f978-crl7b'
kubectl -n kube-system logs $DASHBOARD_POD_NAME
Error from server (NotFound): the server could not find the requested resource ( pods/log kubernetes-dashboard-77fd78f978-crl7b)

试图从 API 服务器 wget:

API_SRV_POD_NAME='kube-apiserver-ubuk8sma'
kubectl  -n 'kube-system' exec -ti $API_SRV_POD_NAME wget https://10.244.1.8:8443/

没有反应。

试图检查仪表板服务的存在,没有运气:

u1@ubuk8sma:~$ kubectl get svc $DASHBOARD_SVC_NAME
Error from server (NotFound): services "kubernetes-dashboard" not found

检查 API 服务器上的 IP 路由表:

kubectl  -n 'kube-system' exec -ti $API_SRV_POD_NAME ip route show
default via 10.0.2.2 dev enp0s3  src 10.0.2.15  metric 100
10.0.2.0/24 dev enp0s3 scope link  src 10.0.2.15
10.0.2.2 dev enp0s3 scope link  src 10.0.2.15  metric 100
10.244.0.0/24 dev cni0 scope link  src 10.244.0.1
10.244.1.0/24 via 10.244.1.0 dev flannel.1 onlink
172.17.0.0/16 dev docker0 scope link  src 172.17.0.1
192.168.151.0/24 dev enp0s8 scope link  src 192.168.151.21

作为参考,enp0s3 是 NAT NIC 适配器,enp0s8 - host-only 一个。我看到法兰绒路线 10.244.1.x。似乎问题与网络错误配置无关(但我可能是错的)。所以,dashboard Pod 看起来像是在运行,但有一些错误,我无法诊断出哪些错误。您能否帮助找到根本原因并在理想情况下使仪表板服务无错误地运行?提前谢谢各位!

更新1:

我在 master 上看到了事件:

  Type     Reason                  Age                From                 Message
  ----     ------                  ----               ----                 -------
  Warning  FailedCreatePodSandBox  11h                kubelet, ubuk8swrk1  Failed create pod sandbox: rpc error: code = Unknown desc = failed to set up sandbox container "43191144d447d0e9da52c8b6600bd96a23fab1e96c79af8c8fedc4e4e50882c7" network for pod "kubernetes-dashboard-77fd78f978-crl7b": NetworkPlugin cni failed to set up pod "kubernetes-dashboard-77fd78f978-crl7b_kube-system" network: open /run/flannel/subnet.env: no such file or directory
  Normal   SandboxChanged          11h (x4 over 11h)  kubelet, ubuk8swrk1  Pod sandbox changed, it will be killed and re-created.
  Normal   Pulled                  11h                kubelet, ubuk8swrk1  Container image "k8s.gcr.io/kubernetes-dashboard-amd64:v1.10.0" already present on machine
  Normal   Created                 11h                kubelet, ubuk8swrk1  Created container
  Normal   Started                 11h                kubelet, ubuk8swrk1  Started container

关于 subnet.env 缺失的错误 - 有点奇怪,因为 master 和 minion 都有它(嗯,可能是动态创建的):

u1@ubuk8swrk1:~$ ls -la /run/flannel/subnet.env
-rw-r--r-- 1 root root 96 Dec  3 08:15 /run/flannel/subnet.env

这是仪表板服务描述符:

Name:                   kubernetes-dashboard
Namespace:              kube-system
Labels:                 k8s-app=kubernetes-dashboard
Annotations:            deployment.kubernetes.io/revision: 1
Selector:               k8s-app=kubernetes-dashboard
Replicas:               1 desired | 1 updated | 1 total | 1 available | 0 unavailable
StrategyType:           RollingUpdate
MinReadySeconds:        0
RollingUpdateStrategy:  25% max unavailable, 25% max surge
Pod Template:
  Labels:           k8s-app=kubernetes-dashboard
  Service Account:  kubernetes-dashboard
  Containers:
   kubernetes-dashboard:
    Image:      k8s.gcr.io/kubernetes-dashboard-amd64:v1.10.0
    Port:       8443/TCP
    Host Port:  0/TCP
    Args:
      --auto-generate-certificates
    Liveness:     http-get https://:8443/ delay=30s timeout=30s period=10s #success=1 #failure=3
    Environment:  <none>
    Mounts:
      /certs from kubernetes-dashboard-certs (rw)
      /tmp from tmp-volume (rw)
  Volumes:
   kubernetes-dashboard-certs:
    Type:        Secret (a volume populated by a Secret)
    SecretName:  kubernetes-dashboard-certs
    Optional:    false
   tmp-volume:
    Type:    EmptyDir (a temporary directory that shares a pod's lifetime)
    Medium:
Conditions:
  Type           Status  Reason
  ----           ------  ------
  Progressing    True    NewReplicaSetAvailable
  Available      True    MinimumReplicasAvailable
OldReplicaSets:  <none>
NewReplicaSet:   kubernetes-dashboard-77fd78f978 (1/1 replicas created)
Events:          <none>

这是对 pod 的简化描述(原始 yaml 为 35K,分享太多):

Name:               coredns-576cbf47c7-4tzm9
Namespace:          kube-system
Node:               ubuk8sma/10.0.2.15
Labels:             k8s-app=kube-dns
                    pod-template-hash=576cbf47c7
Status:             Running
IP:                 10.244.0.14
Controlled By:      ReplicaSet/coredns-576cbf47c7
Containers:
  coredns:
    Container ID:  docker://0efcd043407d93fb9d052045828489f6b99bb59b4f0882ec89e1897071609b77
    Image:         k8s.gcr.io/coredns:1.2.2
    Ports:         53/UDP, 53/TCP, 9153/TCP
    Host Ports:    0/UDP, 0/TCP, 0/TCP
    State:          Running
    Last State:     Terminated
      Reason:       Error
      Exit Code:    255
    Ready:          True
    Restart Count:  6
    Liveness:     http-get http://:8080/health delay=60s timeout=5s period=10s #success=1 #failure=5
Conditions:
  Type              Status
  Initialized       True 
  Ready             True 
  ContainersReady   True 
  PodScheduled      True 
Events:          <none>

Name:               etcd-ubuk8sma
Namespace:          kube-system
Priority:           2000000000
PriorityClassName:  system-cluster-critical
Node:               ubuk8sma/10.0.2.15
Labels:             component=etcd
                    tier=control-plane
Status:             Running
IP:                 10.0.2.15
Containers:
  etcd:
    Container ID:  docker://ba2bdcf5fa558beabdd8578628d71480d595d5ee3bb5c4edf42407419010144b
    Image:         k8s.gcr.io/etcd:3.2.24
    Image ID:      docker-pullable://k8s.gcr.io/etcd@sha256:905d7ca17fd02bc24c0eba9a062753aba15db3e31422390bc3238eb762339b20
    Port:          <none>
    Host Port:     <none>
    Command:
      etcd
      --advertise-client-urls=https://127.0.0.1:2379
      --cert-file=/etc/kubernetes/pki/etcd/server.crt
      --client-cert-auth=true
      --data-dir=/var/lib/etcd
      --initial-advertise-peer-urls=https://127.0.0.1:2380
      --initial-cluster=ubuk8sma=https://127.0.0.1:2380
      --key-file=/etc/kubernetes/pki/etcd/server.key
      --listen-client-urls=https://127.0.0.1:2379
      --listen-peer-urls=https://127.0.0.1:2380
      --name=ubuk8sma
      --peer-cert-file=/etc/kubernetes/pki/etcd/peer.crt
      --peer-client-cert-auth=true
      --peer-key-file=/etc/kubernetes/pki/etcd/peer.key
      --peer-trusted-ca-file=/etc/kubernetes/pki/etcd/ca.crt
      --snapshot-count=10000
      --trusted-ca-file=/etc/kubernetes/pki/etcd/ca.crt
    State:          Running
      Started:      Mon, 03 Dec 2018 08:12:56 +0000
    Last State:     Terminated
      Reason:       Error
      Exit Code:    255
      Started:      Wed, 28 Nov 2018 09:31:46 +0000
      Finished:     Mon, 03 Dec 2018 08:12:35 +0000
    Ready:          True
    Restart Count:  8
    Liveness:       exec [/bin/sh -ec ETCDCTL_API=3 etcdctl --endpoints=https://[127.0.0.1]:2379 --cacert=/etc/kubernetes/pki/etcd/ca.crt --cert=/etc/kubernetes/pki/etcd/healthcheck-client.crt --key=/etc/kubernetes/pki/etcd/healthcheck-client.key get foo] delay=15s timeout=15s period=10s #success=1 #failure=8
    Environment:    <none>
    Mounts:
      /etc/kubernetes/pki/etcd from etcd-certs (rw)
      /var/lib/etcd from etcd-data (rw)
Conditions:
  Type              Status
  Initialized       True 
  Ready             True 
  ContainersReady   True 
  PodScheduled      True 
Events:            <none>


Name:               kube-apiserver-ubuk8sma
Namespace:          kube-system
Node:               ubuk8sma/10.0.2.15
Status:             Running
IP:                 10.0.2.15
Containers:
  kube-apiserver:
    Container ID:  docker://099b2a30772b969c3919b57fd377980673f03a820afba6034daa70f011271a52
    Image:         k8s.gcr.io/kube-apiserver:v1.12.2
    Image ID:      docker-pullable://k8s.gcr.io/kube-apiserver@sha256:094929baf3a7681945d83a7654b3248e586b20506e28526121f50eb359cee44f
    Port:          <none>
    Host Port:     <none>
    Command:
      kube-apiserver
      --authorization-mode=Node,RBAC
      --advertise-address=192.168.151.21
      --allow-privileged=true
      --client-ca-file=/etc/kubernetes/pki/ca.crt
      --enable-admission-plugins=NodeRestriction
      --enable-bootstrap-token-auth=true
      --etcd-cafile=/etc/kubernetes/pki/etcd/ca.crt
      --etcd-certfile=/etc/kubernetes/pki/apiserver-etcd-client.crt
      --etcd-keyfile=/etc/kubernetes/pki/apiserver-etcd-client.key
      --etcd-servers=https://127.0.0.1:2379
      --insecure-port=0
      --kubelet-client-certificate=/etc/kubernetes/pki/apiserver-kubelet-client.crt
      --kubelet-client-key=/etc/kubernetes/pki/apiserver-kubelet-client.key
      --kubelet-preferred-address-types=InternalIP,ExternalIP,Hostname
      --proxy-client-cert-file=/etc/kubernetes/pki/front-proxy-client.crt
      --proxy-client-key-file=/etc/kubernetes/pki/front-proxy-client.key
      --requestheader-allowed-names=front-proxy-client
      --requestheader-client-ca-file=/etc/kubernetes/pki/front-proxy-ca.crt
      --requestheader-extra-headers-prefix=X-Remote-Extra-
      --requestheader-group-headers=X-Remote-Group
      --requestheader-username-headers=X-Remote-User
      --secure-port=6443
      --service-account-key-file=/etc/kubernetes/pki/sa.pub
      --service-cluster-ip-range=10.96.0.0/12
      --tls-cert-file=/etc/kubernetes/pki/apiserver.crt
      --tls-private-key-file=/etc/kubernetes/pki/apiserver.key
    State:          Running
      Started:      Mon, 03 Dec 2018 08:13:00 +0000
    Last State:     Terminated
      Reason:       Error
      Exit Code:    255
    Ready:          True
    Restart Count:  8
    Liveness:     http-get https://192.168.151.21:6443/healthz delay=15s timeout=15s period=10s #success=1 #failure=8
    Environment:  <none>
Events:            <none>

Name:               kube-flannel-ds-amd64-rt442
Namespace:          kube-system
Node:               ubuk8swrk1/10.0.2.15
Status:             Running
IP:                 10.0.2.15
Controlled By:      DaemonSet/kube-flannel-ds-amd64
Init Containers:
  install-cni:
    Container ID:  docker://a6377b0fe1b040235c24e9ca19455c56e77daecf688b212cfea5553b6e59ff68
    Image:         quay.io/coreos/flannel:v0.10.0-amd64
    Port:          <none>
    Host Port:     <none>
    State:          Terminated
      Reason:       Completed
      Exit Code:    0
    Ready:          True
    Restart Count:  4
Containers:
  kube-flannel:
    Container ID:  docker://f7029bc2144c1ab8654407d742c1079df0059d418b7ba86b886091b5ad8c34a3
    Image:         quay.io/coreos/flannel:v0.10.0-amd64
    Port:          <none>
    Host Port:     <none>
    Command:
      /opt/bin/flanneld
    Args:
      --ip-masq
      --kube-subnet-mgr
    State:          Running
    Last State:     Terminated
      Reason:       Error
      Exit Code:    255
    Ready:          True
    Restart Count:  4
Events:          <none>

Name:               kube-proxy-6b6mc
Namespace:          kube-system
Node:               ubuk8sma/10.0.2.15
Status:             Running
IP:                 10.0.2.15

最大的嫌疑是节点IP。我到处都能看到 10.0.2.15(NAT IP)。但应使用仅主机 NIC。我为我的 ubuntu 虚拟机正确设置网络的故事由来已久。我/etc/netplan/01-netcfg.yaml在 k8s 设置之前进行了编辑(感谢https://askubuntu.com/questions/984445/netplan-configuration-on-ubuntu-17-04-virtual-machine?rq=1的帮助)。主配置示例:

network:
  version: 2
  renderer: networkd
  ethernets:
    enp0s3:
      dhcp4: yes
      dhcp6: yes
      routes:
      - to: 0.0.0.0/0
        via: 10.0.2.2
        metric: 0
    enp0s8:
      dhcp4: no
      dhcp6: no
      addresses: [192.168.151.21/24]
      routes:
      - to: 192.168.151.1/24
        via: 192.168.151.1
        metric: 100

只有在这和一些其他更改之后,NAT 和仅主机网络才开始协同工作。NAT 仍然是默认的网络适配器。可能这就是为什么它的 IP 无处不在。--advertise-address=192.168.151.21对于我明确设置的 api 服务器。至少为此减少了使用 NAT IP。因此,也许根本原因不同,但当前的问题是,如何重新配置​​网络以将 NAT IP 替换为仅主机。我已经试过了 /etc/systemd/system/kubelet.service.d/10-kubeadm.conf

Environment="KUBELET_EXTRA_ARGS=--node-ip=192.168.151.21"

重启 kubelet:

sudo systemctl daemon-reload
sudo systemctl restart kubelet

没有帮助。重新启动的虚拟机。没有帮助(我只期望与 kubelet 相关的更改,但没有任何改变)。探索了一些配置(5+)的潜在变化,没有运气。

更新2:

我在上面提到了 NAT 地址配置问题。我通过编辑/etc/default/kubelet配置解决了它。我在这篇文章的评论中发现了这个想法: https ://medium.com/@joatmon08/playing-with-kubeadm-in-vagrant-machines-part-2-bac431095706

仪表板配置部分现在具有正确的 IP:

hostIP: 192.168.151.22
phase: Running
podIP: 10.244.1.13

然后我去 docker 容器获取 API 并尝试通过 wget、ping、traceroute 访问 podIP。到处都是超时。路线:

/ # route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         10.0.2.2        0.0.0.0         UG    100    0        0 enp0s3
10.0.2.0        0.0.0.0         255.255.255.0   U     0      0        0 enp0s3
10.0.2.2        0.0.0.0         255.255.255.255 UH    100    0        0 enp0s3
10.244.0.0      0.0.0.0         255.255.255.0   U     0      0        0 cni0
10.244.1.0      10.244.1.0      255.255.255.0   UG    0      0        0 flannel.1
172.17.0.0      0.0.0.0         255.255.0.0     U     0      0        0 docker0
192.168.151.0   0.0.0.0         255.255.255.0   U     0      0        0 enp0s8

尝试从主 VM 执行 curl 调用:

u1@ubuk8sma:~$ curl -v -i -kSs "https://192.168.151.21:6443/api/v1/namespaces/kube-system/services/https:kubernetes-dashboard:/proxy/" -H "$K8S_AUTH_HEADER"
...
*  SSL certificate verify result: unable to get local issuer certificate (20), continuing anyway.
* Using HTTP2, server supports multi-use
* Connection state changed (HTTP/2 confirmed)
* Copying HTTP/2 data in stream buffer to connection buffer after upgrade: len=0
* Using Stream ID: 1 (easy handle 0x565072b5a750)
> GET /api/v1/namespaces/kube-system/services/https:kubernetes-dashboard:/proxy/ HTTP/2
> Host: 192.168.151.21:6443
> User-Agent: curl/7.58.0
> Accept: */*
> Authorization: Bearer eyJhbGciOiJSUzI1.....
>
* Connection state changed (MAX_CONCURRENT_STREAMS updated)!
< HTTP/2 503
HTTP/2 503
< content-type: text/plain; charset=utf-8
content-type: text/plain; charset=utf-8
< content-length: 92
content-length: 92
< date: Tue, 04 Dec 2018 08:44:25 GMT
date: Tue, 04 Dec 2018 08:44:25 GMT

<
Error: 'dial tcp 10.244.1.13:8443: i/o timeout'
* Connection #0 to host 192.168.151.21 left intact
Trying to reach: 'https://10.244.1.13:8443/'

仪表板的服务信息:

u1@ubuk8sma:~$ kubectl -n kube-system get service kubernetes-dashboard
NAME                   TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)   AGE
kubernetes-dashboard   ClusterIP   10.103.36.134   <none>        443/TCP   5d

更多细节:

u1@ubuk8sma:~$ kubectl -n kube-system describe services kubernetes-dashboard
Name:              kubernetes-dashboard
Namespace:         kube-system
Labels:            k8s-app=kubernetes-dashboard
Annotations:       <none>
Selector:          k8s-app=kubernetes-dashboard
Type:              ClusterIP
IP:                10.103.36.134
Port:              <unset>  443/TCP
TargetPort:        8443/TCP
Endpoints:         10.244.1.13:8443
Session Affinity:  None
Events:            <none>

我也尝试通过 kubectl 和 docker 进入 shell。对于任何常用的 linux 命令,我都会看到这个“OCI runtime exec failed”问题:

u1@ubuk8sma:~$ DASHBOARD_POD_NAME='kubernetes-dashboard-77fd78f978-crl7b'
u1@ubuk8sma:~$ kubectl -v=9 -n kube-system exec "$DASHBOARD_POD_NAME" -- env
I1204 09:57:17.673345   23517 loader.go:359] Config loaded from file /home/u1/.kube/config
I1204 09:57:17.679526   23517 round_trippers.go:386] curl -k -v -XGET  -H "Accept: application/json, */*" -H "User-Agent: kubectl/v1.12.2 (linux/amd64) kubernetes/17c77c7" 'https://192.168.151.21:6443/api/v1/namespaces/kube-system/pods/kubernetes-dashboard-77fd78f978-crl7b'
I1204 09:57:17.703924   23517 round_trippers.go:405] GET https://192.168.151.21:6443/api/v1/namespaces/kube-system/pods/kubernetes-dashboard-77fd78f978-crl7b 200 OK in 23 milliseconds
I1204 09:57:17.703957   23517 round_trippers.go:411] Response Headers:
I1204 09:57:17.703971   23517 round_trippers.go:414]     Content-Length: 3435
I1204 09:57:17.703984   23517 round_trippers.go:414]     Date: Tue, 04 Dec 2018 09:57:17 GMT
I1204 09:57:17.703997   23517 round_trippers.go:414]     Content-Type: application/json
I1204 09:57:17.704866   23517 request.go:942] Response Body: {"kind":"Pod","apiVersion":"v1","metadata":{"name":"kubernetes-dashboard-77fd78f978-crl7b","generateName":"kubernetes-dashboard-77fd78f978-","namespace":"kube-system","selfLink":"/api/v1/namespaces/kube-system/pods/kubernetes-dashboard-77fd78f978-crl7b","uid":"a1d005b8-f3a6-11e8-a2d0-08002783a80f"...
I1204 09:57:17.740811   23517 round_trippers.go:386] curl -k -v -XPOST  -H "X-Stream-Protocol-Version: v4.channel.k8s.io" -H "X-Stream-Protocol-Version: v3.channel.k8s.io" -H "X-Stream-Protocol-Version: v2.channel.k8s.io" -H "X-Stream-Protocol-Version: channel.k8s.io" -H "User-Agent: kubectl/v1.12.2 (linux/amd64) kubernetes/17c77c7" 'https://192.168.151.21:6443/api/v1/namespaces/kube-system/pods/kubernetes-dashboard-77fd78f978-crl7b/exec?command=env&container=kubernetes-dashboard&container=kubernetes-dashboard&stderr=true&stdout=true'
I1204 09:57:17.805528   23517 round_trippers.go:405] POST https://192.168.151.21:6443/api/v1/namespaces/kube-system/pods/kubernetes-dashboard-77fd78f978-crl7b/exec?command=env&container=kubernetes-dashboard&container=kubernetes-dashboard&stderr=true&stdout=true 101 Switching Protocols in 64 milliseconds
I1204 09:57:17.805565   23517 round_trippers.go:411] Response Headers:
I1204 09:57:17.805581   23517 round_trippers.go:414]     Connection: Upgrade
I1204 09:57:17.805594   23517 round_trippers.go:414]     Upgrade: SPDY/3.1
I1204 09:57:17.805607   23517 round_trippers.go:414]     X-Stream-Protocol-Version: v4.channel.k8s.io
I1204 09:57:17.805620   23517 round_trippers.go:414]     Date: Tue, 04 Dec 2018 09:57:17 GMT
OCI runtime exec failed: exec failed: container_linux.go:348: starting container process caused "exec: \"env\": executable file not found in $PATH": unknown
F1204 09:57:18.088488   23517 helpers.go:119] command terminated with exit code 126

所以,我无法到达吊舱,无法去那里的炮弹。但至少我看到了一些日志:

u1@ubuk8sma:~$ kubectl -n kube-system logs -p $DASHBOARD_POD_NAME
2018/12/03 08:15:16 Starting overwatch
2018/12/03 08:15:16 Using in-cluster config to connect to apiserver
2018/12/03 08:15:16 Using service account token for csrf signing
2018/12/03 08:15:16 No request provided. Skipping authorization
2018/12/03 08:15:16 Successful initial request to the apiserver, version: v1.12.2
2018/12/03 08:15:16 Generating JWE encryption key
2018/12/03 08:15:16 New synchronizer has been registered: kubernetes-dashboard-key-holder-kube-system. Starting
2018/12/03 08:15:16 Starting secret synchronizer for kubernetes-dashboard-key-holder in namespace kube-system
2018/12/03 08:15:18 Initializing JWE encryption key from synchronized object
2018/12/03 08:15:18 Creating in-cluster Heapster client
2018/12/03 08:15:19 Metric client health check failed: the server could not find the requested resource (get services heapster). Retrying in 30 seconds.
2018/12/03 08:15:19 Auto-generating certificates
2018/12/03 08:15:19 Successfully created certificates
2018/12/03 08:15:19 Serving securely on HTTPS port: 8443
2018/12/03 08:15:49 Metric client health check failed: the server could not find the requested resource (get services heapster). Retrying in 30 seconds.    

没有想法,现在该去哪里解决这个超时问题。

标签: kubernetesdashboard

解决方案


推荐阅读