Networking Kubernetes,访问集群外的IP
我有一个公司网络(10.22..),它承载一个Kubernetes集群(10.225.0.1)。如何从群集中的pod内访问同一网络中但在群集中外部的某些VM 例如,我有一个IP为10.22.0.1:30000的VM,我需要从Kubernetes集群中的Pod访问它。我试图创建这样的服务Networking Kubernetes,访问集群外的IP,networking,kubernetes,Networking,Kubernetes,我有一个公司网络(10.22..),它承载一个Kubernetes集群(10.225.0.1)。如何从群集中的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:
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”操作时,它返回“connection-rejected”错误。但它与“google.com”合作。访问外部IP的方式有哪些?您可以为此创建一个
让我们看一个例子:
在本例中,我的网络上有一个http服务器,IP10.128.15.209
,我希望可以从Kubernetes集群中的pod访问它
第一件事是创建一个端点。这将允许我创建一个指向该端点的服务,该服务将流量重定向到我的外部http服务器
我的端点清单如下所示:
apiVersion: v1
kind: Endpoints
metadata:
name: http-server
subsets:
- addresses:
- ip: 10.128.15.209
ports:
- port: 80
让我们创建我们的服务:
apiVersion: v1
kind: Service
metadata:
name: http-server
spec:
ports:
- port: 80
targetPort: 80
检查我们的服务是否存在,并保存其群集IP以供信函使用:
user@minikube-server:~$$ kubectl get service
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
http-server ClusterIP 10.96.228.220 <none> 80/TCP 30m
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 10d
此命令将在ubuntu pod中创建并打开bash会话
在我的例子中,我将安装curl,以便能够检查我是否可以访问http服务器。您可能需要安装mysql:
root@ubuntu:/# apt update; apt install -y curl
使用clusterIP检查与我的服务的连接:
root@ubuntu:/# curl 10.128.15.209:80
Hello World!
最后使用服务名称(DNS):
因此,在您的具体情况下,您必须创建以下内容:
apiVersion: v1
kind: Endpoints
metadata:
name: vm-server
subsets:
- addresses:
- ip: 10.22.0.1
ports:
- port: 30000
---
apiVersion: v1
kind: Service
metadata:
name: vm-server
spec:
ports:
- port: 30000
targetPort: 30000
externalIPs
允许您使用Kubernetes不控制的IP将流量路由到集群。您是否将其与ExternalName
混淆?此外,如果两个内部网络以某种方式连接,并且您的路由器有一条到该网络的路由,那么它应该可以在不需要额外服务的情况下工作。您是否测试过VM是否可以从集群中运行的pod或Kubernetes工作节点访问?外部路由通常通过IP伪装实现,这是由kube代理完成的。一旦你确定虚拟机确实是可访问的,你就可以设置一个ExternalName服务,在集群中有一个更友好的名称。如果我只是卷曲虚拟机的IP,它会返回“卷曲:(7)连接到10.22.0.1端口30000失败:连接超时”。我猜这是因为Kubernetes试图在自己的网络中找到IP。或者可能是因为集群位于AWS,并且应该有一些规则来配置到另一个子网的路由。ExternalName不适用于IPs.Thanx,但我得到“连接超时”。我想这与网络设置有关。谢谢。这肯定是网络上的东西。你的集群是裸机吗?您可以从Kubernetes主节点访问此服务?它位于AWS,由云团队管理。我认为如果我能从虚拟机中ping出光泽,那么它应该是反向工作的。但是我想VPC应该有路由到有VM的子网。
root@ubuntu:/# apt update; apt install -y curl
root@ubuntu:/# curl 10.128.15.209:80
Hello World!
root@ubuntu:/# curl http-server
Hello World!
apiVersion: v1
kind: Endpoints
metadata:
name: vm-server
subsets:
- addresses:
- ip: 10.22.0.1
ports:
- port: 30000
---
apiVersion: v1
kind: Service
metadata:
name: vm-server
spec:
ports:
- port: 30000
targetPort: 30000