在使用主机网络选项运行的容器中,可以使用主机网络接口及其来自容器的IP,并通过此接口和IP联系外部网络。因此,如果主机配置了多个IP,则容器可以选择使用哪个IP。
我可以与Kubernetes进行类似的设置,让容器使用主机IP吗?
注意:我需要从特定IP联系外部服务的过程,我不一定需要从外部视图将这些IP分配给容器。
正如我在Egress IP adress selection写的那样:
可以帮助您解决问题的一个方面是Istio Egress Gateway,所以我建议你研究一下。
否则,它仍然依赖于特定平台和部署群集的方式。例如,在AWS上,您可以通过使用分配了弹性IP的实例来转发您的流量(无论是常规EC2还是AWS NAT网关),确保您的出口流量始终离开预定义的已知IP集。即使使用上面的Egress,您也需要一些方法来为此定义固定IP,因此AWS ElasticIP(或等效的)是必须的。
我会试着试一试。我希望我理解你的问题。您只需要从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
Finally in your pod, you can simply refer to the service name in this case (your-external-system)
pod规范中的hostNetwork=true
将主机网络暴露给pod,容器可以访问网络接口:
apiVersion: v1
kind: Pod
metadata:
name: lookup
spec:
hostNetwork: true
containers:
- name: lookup
image: sbusso/lookup_ips:latest
ports:
- containerPort: 9000
测试它:kubectl port-forward lookup 9000
然后转到http://127.0.0.1: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良好实践中不建议使用此选项:https://kubernetes.io/docs/concepts/configuration/overview/#services