Networking 如何使用容器中的主机IP?
在使用主机网络选项运行的容器中,可以从容器使用主机网络接口及其IP,并从该接口和IP与外部网络联系。因此,如果主机配置了多个IP,容器可以选择使用哪个IP 我可以用Kubernetes进行类似的设置,让容器使用主机IP吗 注意:我需要从特定IP与外部服务联系的过程,我不一定需要从外部视图将这些IP分配给容器。如我在中所述: 有一件事可以帮助你解决这个问题,那就是Istio出口网关,所以我建议你研究一下 否则,它仍然依赖于特定的平台和部署集群的方式。例如,在AWS上,您可以通过使用分配有弹性IP的实例转发流量(无论是常规EC2s还是AWS NAT网关),确保出口流量始终离开预定义的已知IP集。即使使用上面的出口,您也需要某种方法来定义一个固定的IP,所以AWS ElasticIP(或等效物)是必须的 正如我在书中所写: 有一件事可以帮助你解决这个问题,那就是Istio出口网关,所以我建议你研究一下 否则,它仍然依赖于特定的平台和部署集群的方式。例如,在AWS上,您可以通过使用分配有弹性IP的实例转发流量(无论是常规EC2s还是AWS NAT网关),确保出口流量始终离开预定义的已知IP集。即使使用上面的出口,您也需要某种方法来定义一个固定的IP,所以AWS ElasticIP(或等效物)是必须的Networking 如何使用容器中的主机IP?,networking,kubernetes,Networking,Kubernetes,在使用主机网络选项运行的容器中,可以从容器使用主机网络接口及其IP,并从该接口和IP与外部网络联系。因此,如果主机配置了多个IP,容器可以选择使用哪个IP 我可以用Kubernetes进行类似的设置,让容器使用主机IP吗 注意:我需要从特定IP与外部服务联系的过程,我不一定需要从外部视图将这些IP分配给容器。如我在中所述: 有一件事可以帮助你解决这个问题,那就是Istio出口网关,所以我建议你研究一下 否则,它仍然依赖于特定的平台和部署集群的方式。例如,在AWS上,您可以通过使用分配有弹性IP的
我会试试看。我希望我能理解你的问题。您只需要从吊舱/容器内部连接到外部ip 我们通过创建一个没有选择器的kubernetes服务来实现这一点。
kind: Service
apiVersion: v1
metadata:
name: your-external-system
然后创建与服务同名的端点对象。
kind: Endpoints
apiVersion: v1
metadata:
name: your-external-system
subsets:
- addresses:
- ip: 192.168.0.1
ports:
- port: 3306
最后,在您的pod中,您可以简单地引用本例中的服务名称(您的外部系统)我将尝试尝试一下。我希望我能理解你的问题。您只需要从吊舱/容器内部连接到外部ip 我们通过创建一个没有选择器的kubernetes服务来实现这一点。
kind: Service
apiVersion: v1
metadata:
name: your-external-system
然后创建与服务同名的端点对象。
kind: Endpoints
apiVersion: v1
metadata:
name: your-external-system
subsets:
- addresses:
- ip: 192.168.0.1
ports:
- port: 3306
最后,在您的pod中,您只需在本例中引用服务名称(您的外部系统)
hostNetwork=true
在pod规范中向pod公开主机网络,容器可以访问网络接口:
apiVersion: v1
kind: Pod
metadata:
name: lookup
spec:
hostNetwork: true
containers:
- name: lookup
image: sbusso/lookup_ips:latest
ports:
- containerPort: 9000
要测试它:kubectl端口正向查找9000
,然后转到并获取网络接口详细信息:
lo
- 127.0.0.1/8
- ::1/128
eth0
- 10.0.2.15/24
- fe80::a00:27ff:fea1:6e61/64
eth1
- 192.168.99.101/24
- fe80::a00:27ff:fe77:d179/64
注意:Kubernetes良好实践中不建议使用此选项:pod规范中的主机网络向pod公开,容器可以访问网络接口:
apiVersion: v1
kind: Pod
metadata:
name: lookup
spec:
hostNetwork: true
containers:
- name: lookup
image: sbusso/lookup_ips:latest
ports:
- containerPort: 9000
要测试它:kubectl端口正向查找9000
,然后转到并获取网络接口详细信息:
lo
- 127.0.0.1/8
- ::1/128
eth0
- 10.0.2.15/24
- fe80::a00:27ff:fea1:6e61/64
eth1
- 192.168.99.101/24
- fe80::a00:27ff:fe77:d179/64
注意:Kubernetes良好实践中不建议使用此选项:谢谢您的回答。这个想法看起来很有趣,然后我进一步研究了出口网关。除了阻止到外部服务的通信之外,我没有看到如何处理来自容器的IP,或者根据请求更改TCP请求IP。它还将带来限制,因为它需要配置所有外部IP,这里我们可能有不断变化的IP。主机IP静态连接到主机,我不打算使用AWS。谢谢你的回答。这个想法看起来很有趣,然后我进一步研究了出口网关。除了阻止到外部服务的通信之外,我没有看到如何处理来自容器的IP,或者根据请求更改TCP请求IP。它还将带来限制,因为它需要配置所有外部IP,这里我们可能有不断变化的IP。主机IP静态连接到主机,我不打算使用AWS。不是外部IP,而是从主机IP作为源IP。哦,你不必做任何事情。如果您的pod想要与之通信的服务在集群之外,该服务将从您的pod运行的位置查看hostIp。我知道这一点,因为我们的一个系统正在使用ip过滤,只允许某些主机连接到它。我们所做的只是将所有kubernetes主机IP添加到白名单中。我需要容器来选择其IP。您可以在pod中配置hostNetwork=true。它类似于docker——网络主机。这就是你想要的吗?这也是我想出来的一个选项,这样做不是测试外部IP,而是从主机IP作为源IP。哦,你不必做任何事情。如果您的pod想要与之通信的服务在集群之外,该服务将从您的pod运行的位置查看hostIp。我知道这一点,因为我们的一个系统正在使用ip过滤,只允许某些主机连接到它。我们所做的只是将所有kubernetes主机IP添加到白名单中。我需要容器来选择其IP。您可以在pod中配置hostNetwork=true。它类似于docker——网络主机。这就是你要找的吗?这也是我想出来的一个选择,这样做是为了测试