Amazon web services 无法通过web浏览器使用kubectl代理访问kubernetes仪表板

Amazon web services 无法通过web浏览器使用kubectl代理访问kubernetes仪表板,amazon-web-services,kubernetes,coreos,Amazon Web Services,Kubernetes,Coreos,这是一个类似的问题,但我无法从中找到解决方案。通过以下步骤,我在AWS上设置了Kubernetes集群,其中包含CoreOS 2个主节点和3个节点。k8s版本是1.4.0,所有服务器都在一个私有子网中,因此我在不同的VPC上构建了一个bastion VPN服务器,并通过bastion服务器通过VPC对等连接到k8s群集 它基本上工作得很好,但我注意到我无法从web浏览器访问kubernetes仪表板。 这些是我的kuberentes仪表板svc和rc yaml文件 apiVersion: v1

这是一个类似的问题,但我无法从中找到解决方案。通过以下步骤,我在AWS上设置了Kubernetes集群,其中包含CoreOS 2个主节点和3个节点。k8s版本是1.4.0,所有服务器都在一个私有子网中,因此我在不同的VPC上构建了一个bastion VPN服务器,并通过bastion服务器通过VPC对等连接到k8s群集

它基本上工作得很好,但我注意到我无法从web浏览器访问kubernetes仪表板。 这些是我的kuberentes仪表板svc和rc yaml文件

apiVersion: v1
kind: Service
metadata:
  name: kubernetes-dashboard
  namespace: kube-system
  labels:
    k8s-app: kubernetes-dashboard
    kubernetes.io/cluster-service: "true"
spec:
  selector:
    k8s-app: kubernetes-dashboard
  ports:
  - port: 80
    targetPort: 9090
---
apiVersion: v1
kind: ReplicationController
metadata:
  name: kubernetes-dashboard-v1.4.0
  namespace: kube-system
  labels:
    k8s-app: kubernetes-dashboard
    version: v1.4.0
    kubernetes.io/cluster-service: "true"
spec:
  replicas: 1
  selector:
    k8s-app: kubernetes-dashboard
  template:
    metadata:
      labels:
        k8s-app: kubernetes-dashboard
        version: v1.4.0
        kubernetes.io/cluster-service: "true"
      annotations:
        scheduler.alpha.kubernetes.io/critical-pod: ''
        scheduler.alpha.kubernetes.io/tolerations: '[{"key":"CriticalAddonsOnly", "operator":"Exists"}]'
    spec:
      containers:
      - name: kubernetes-dashboard
        image: gcr.io/google_containers/kubernetes-dashboard-amd64:v1.4.0
        resources:
          limits:
            cpu: 100m
            memory: 50Mi
          requests:
            cpu: 100m
            memory: 50Mi
        ports:
        - containerPort: 9090
        livenessProbe:
          httpGet:
            path: /
            port: 9090
          initialDelaySeconds: 30
          timeoutSeconds: 30
如果我只是访问
https://master-host/ui
,它返回身份验证错误。我理解它,感觉没有问题,因为api服务器需要身份验证。但是当我运行
kubectl proxy--port=8001
时,访问
http://localhost:8001/api/v1/proxy/namespaces/kube-system/services/kubernetes dashboard/
,浏览器返回

Error: 'dial tcp 10.10.93.3:9090: i/o timeout'
Trying to reach: 'http://10.10.93.3:9090/'
而对api服务器的请求就像
http://localhost:8001/static
返回:

{
  "paths": [
    "/api",
    "/api/v1",
    "/apis",
    "/apis/apps",
    "/apis/apps/v1alpha1",
    "/apis/authentication.k8s.io",
    "/apis/authentication.k8s.io/v1beta1",
    "/apis/authorization.k8s.io",
    "/apis/authorization.k8s.io/v1beta1",
    "/apis/autoscaling",
    "/apis/autoscaling/v1",
    "/apis/batch",
    "/apis/batch/v1",
    "/apis/batch/v2alpha1",
    "/apis/certificates.k8s.io",
    "/apis/certificates.k8s.io/v1alpha1",
    "/apis/extensions",
    "/apis/extensions/v1beta1",
    "/apis/policy",
    "/apis/policy/v1alpha1",
    "/apis/rbac.authorization.k8s.io",
    "/apis/rbac.authorization.k8s.io/v1alpha1",
    "/apis/storage.k8s.io",
    "/apis/storage.k8s.io/v1beta1",
    "/healthz",
    "/healthz/ping",
    "/logs",
    "/metrics",
    "/swaggerapi/",
    "/ui/",
    "/version"
  ]
}
看起来主机上的pod无法连接到节点上的pod。从节点上的busybox

kubectl exec busybox -- wget 10.10.93.3:9090
可以获取index.html,这样节点之间的通信应该是正常的

服务结果描述:

❯❯❯ kubectl describe svc kubernetes-dashboard --namespace=kube-system                                                                        ⏎ master ⬆ ✭ ✚ ✱ ➜ ◼
Name:           kubernetes-dashboard
Namespace:      kube-system
Labels:         k8s-app=kubernetes-dashboard
            kubernetes.io/cluster-service=true
Selector:       k8s-app=kubernetes-dashboard
Type:           ClusterIP
IP:         10.11.0.82
Port:           <unset> 80/TCP
Endpoints:      10.10.93.9:9090
Session Affinity:   None
No events.
所以看起来仪表板上没有任何东西

[更新] 我在api服务器pod上找到了这些日志

 proxy.go:186] Error proxying data from backend to client: write tcp [master-ip-address]:443->[vpn-ip-address]:61980: write: connection timed out

显然,在api服务器和VPN服务器之间代理时发生了一些问题。

您的服务配置似乎有一个输入错误:

spec:
  selector:
    k8s-app: kubernetes-dashboar

您应该能够执行
kubectl description svc kubernetes dashboard--namespace=kube system
,并在一切正常时查看有效的端点。

啊……最后我注意到我的AWS安全设置有一个错误。也就是说,我为flanneld打开了TCP 8472端口about master=>节点通信,应该是UDP。我知道应该是UDP,所以我花了很长时间才重新检查并注意到错误


更新设置后,
kubectl proxy
立即生效,我现在可以看到kubernetes仪表板了。

啊,很抱歉,这是我粘贴到这篇文章时的一个打字错误,在实际的yaml文件中,它写为“k8s app:kubernetes仪表板”,所以这没有关系。我修改了我的第一篇帖子。@NorioAkagi-你的
kubectl如何描述svc-kubernetes仪表板--namespace=kube-system
say?它提到了端点吗?我在第一篇文章中粘贴了命令的结果。它显示了一个端点。此外,我在文章底部的api服务器上发布了错误日志。我目前怀疑VPN连接导致了一些故障。
spec:
  selector:
    k8s-app: kubernetes-dashboar