【发布时间】:2020-07-28 08:22:05
【问题描述】:
我有一个托管 Kubernetes 集群 (10.225.0.1) 的公司网络 (10.22..)。如何从集群中的 pod 内访问同一网络中但在集群外部的某些 VM?
例如,我有一个 IP 为 10.22.0.1:30000 的 VM,我需要从 Kubernetes 集群中的 Pod 访问它。我试图创建这样的服务
apiVersion: v1
kind: Service
metadata:
name: vm-ip
spec:
selector:
app: vm-ip
ports:
- name: vm
protocol: TCP
port: 30000
targetPort: 30000
externalIPs:
- 10.22.0.1
但是当我从 Pod(kubectl exec -it) 执行“curl http://vm-ip:30000”时,它返回“连接被拒绝”错误。但它适用于“google.com”。访问外部IP的方式有哪些?
【问题讨论】:
-
externalIPs允许您使用 Kubernetes 无法控制的 IP 将流量路由进入集群。您是否将其与ExternalName混淆了?此外,如果两个内部网络以某种方式连接,并且您的路由器有到该网络的路由,它应该可以在不需要额外服务的情况下工作。 -
您是否测试过 VM 是否可以从集群中运行的 pod 或 Kubernetes 工作节点访问?外部路由通常通过 IP 伪装来实现,这由 kube-proxy 完成。一旦确定 VM 确实可以访问,您就可以设置 ExternalName 服务,以便在集群中使用更友好的名称。
-
如果我只是卷曲虚拟机的 IP,它会返回“卷曲:(7)无法连接到 10.22.0.1 端口 30000:连接超时”。我猜这是因为 Kubernetes 试图在自己的网络中找到 IP。或者可能是因为集群位于 AWS,并且应该有一些规则配置到另一个子网的路由。 ExternalName 不适用于 IP。
标签: networking kubernetes