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