【发布时间】:2020-05-27 23:57:02
【问题描述】:
我有两个非常不同的集群(一个使用 kubernetes 1.13 和仪表板 1.0 并在 aws 中使用 kops 创建;另一个使用 kubernetes 1.14 和仪表板 2.0 并使用 EKS 创建)两者都有相同的问题,我使用 kubectl 1.17 进行接口既。启动kubectl proxy 后,我可以通过curl 访问我刚刚安装的仪表板。例如,在较新的 EKS 集群中使用仪表板 2.0:
在一个终端中:
$ kubectl proxy
Starting to serve on 127.0.0.1:8001
在另一个终端
$ curl http://127.0.0.1:8001/api/v1/namespaces/kubernetes-dashboard/services/https:kubernetes-dashboard:/proxy/
<!--
Copyright 2017 The Kubernetes Authors.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Kubernetes Dashboard</title>
<link rel="icon" type="image/png" href="assets/images/kubernetes-logo.png"/>
<meta name="viewport" content="width=device-width">
<link rel="stylesheet" href="styles.d8a1833bf9631b49f8ae.css"></head>
<body>
<kd-root></kd-root>
<script src="runtime.a3c2fb5c390e8fb10577.js" defer=""></script><script src="polyfills-es5.ddf623b9f96429e29863.js" nomodule="" defer=""></script><script src="polyfills.24a7a4821c30c3b30717.js" defer=""></script><script src="scripts.391d299173602e261418.js" defer=""></script><script src="main.a0d83b15387cfc420c65.js" defer=""></script></body>
</html>
显然仪表板服务是可访问的并响应请求。其他集群/仪表板组合的 html 有点不同,但仍然没有错误。
但是来自 chrome 或 firefox 的完全相同的 URL(当然在同一主机上运行)给了我一个错误:
This site can’t be reached
127.0.0.1 refused to connect.
Try:
Checking the connection
Checking the proxy and the firewall
ERR_CONNECTION_REFUSED
仪表板 2.0 本身似乎很高兴:
$ kubectl get all -n kubernetes-dashboard
NAME READY STATUS RESTARTS AGE
pod/dashboard-metrics-scraper-76679bc5b9-k7qjp 1/1 Running 0 136m
pod/kubernetes-dashboard-565688d4c4-dtw5w 1/1 Running 0 136m
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/dashboard-metrics-scraper ClusterIP 172.20.42.193 <none> 8000/TCP 142m
service/kubernetes-dashboard ClusterIP 172.20.232.104 <none> 443/TCP 142m
NAME READY UP-TO-DATE AVAILABLE AGE
deployment.apps/dashboard-metrics-scraper 1/1 1 1 142m
deployment.apps/kubernetes-dashboard 1/1 1 1 142m
NAME DESIRED CURRENT READY AGE
replicaset.apps/dashboard-metrics-scraper-6c554969c6 0 0 0 137m
replicaset.apps/dashboard-metrics-scraper-76679bc5b9 1 1 1 142m
replicaset.apps/kubernetes-dashboard-565688d4c4 1 1 1 142m
replicaset.apps/kubernetes-dashboard-56c5f95c6b 0 0 0 137m
任何想法有什么问题吗?它怎么可能与 curl 而不是 Web 浏览器一起使用?
更新信息:
我检查了 ifconfig:
$ ifconfig
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 172.17.0.2 netmask 255.255.0.0 broadcast 172.17.255.255
...
lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
...
使用以下 kubectl proxy 命令,我也可以在浏览器中访问仪表板:
在一个终端中:
kubectl proxy --address='172.17.0.2' --accept-hosts='.*'
然后 chrome 浏览器到http://172.17.0.2:8001/api/v1/namespaces/kubernetes-dashboard/services/https:kubernetes-dashboard:/proxy/ 显示登录屏幕。
这两个标志都是必需的,否则 curl 和浏览器都不起作用(如果我不使用 --accept-hosts,则响应是禁止的——尽管该响应来自服务,所以它至少比使用环回时更好)。
用 localhost 替换 127.0.0.1 没有帮助。只有当我使用完整的代理命令和http://172.17.0.2:8001/api 时,我才能访问 api 服务器。
有谁知道为什么 chrome 不能处理 127.0.0.1,而 curl 可以,为什么在 curl 172.12 IP 而不是使用 127 IP 时需要接受主机?
【问题讨论】:
-
如果您在浏览器中使用 localhost 而不是 12.0.0.1 是否有效?您是否可以通过 kubectl 代理从浏览器访问其他任何内容?例如 localhost:8001/api
-
@arghya 在帖子中添加了信息,但两个问题基本上都没有。
标签: google-chrome curl kubernetes kubernetes-dashboard kubernetes-apiserver