У меня есть два очень разных кластера (один kubernetes 1.13 с приборной панелью 1.0 и созданный с помощью kops в aws; другой использует kubernetes 1.14 с приборной панелью 2.0 и создан с помощью EKS) одинаковая проблема для обоих, и я использую kubectl 1.17 для взаимодействия с обоими. Как только я запустил kubectl proxy
, я смогу добраться до панели управления, которую я только что установил, через curl . Например, с приборной панелью 2.0 в более новом кластере EKS:
В одном терминале:
$ 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 немного отличается от другой комбинации кластера / приборной панели, но все еще без ошибок.
Однако тот же самый URL-адрес из chrome или firefox (работающий на том же хосте, конечно) дает мне ошибка:
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, а не с веб-браузером?
Обновленная информация:
Я проверил 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 я могу получить доступ панель инструментов в браузере:
В одном терминале:
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
, хотя этот ответ исходит от службы, поэтому он, по крайней мере, лучше, чем при использовании шлейф).
Замена на 127.0.0.1 на localhost не помогает. Я могу получить доступ к серверу api, только если я использовал полную команду прокси и http://172.17.0.2: 8001 / api .
Кто-нибудь знает, почему chrome не обрабатывает 127.0.0.1, тогда как curl обрабатывает, и почему этот accept-hosts необходим при скручивании 172,12 IP, но не при использовании 127 IP?