【发布时间】:2016-10-05 18:24:01
【问题描述】:
这是与this 类似的问题,但我无法从中找到解决方案。我已经按照step by step guide 在 AWS 上设置了具有 CoreOS 2 主服务器和 3 个节点的 Kubernetes 集群。 k8s 版本是 1.4.0,所有服务器都在一个私有子网中,所以我在不同的 VPC 上构建了一个堡垒 VPN 服务器,并通过具有 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"
]
}
看起来 master 上的 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.
我还缺少什么?如果我使用 NodePort,我可以看到仪表板,但我不想公开仪表板。我怀疑我必须在 AWS 安全组设置上打开一些缺少的端口,或者一些 flanneld/docker/cni 网络设置出错并导致问题。
这是仪表板窗格的日志。
Starting HTTP server on port 9090
Creating API server client for https://10.11.0.1:443
Successful initial request to the apiserver, version: v1.4.0+coreos.1
Creating in-cluster Heapster client
所以它看起来实际上没有到达仪表板。
[更新] 我在 api-server 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 服务器之间进行代理时发生了一些事情。
【问题讨论】:
标签: amazon-web-services kubernetes coreos