如何使用容器中的主机IP?

时间:2018-08-30 15:51:59

标签: networking kubernetes

在带有主机联网选项的容器中,可以使用容器中的主机网络接口及其IP,并可以通过该接口和IP与外部网络 联系。因此,如果主机配置了多个IP,则容器可以选择使用哪个IP。

我可以对Kubernetes进行类似的设置,并让容器使用主机IP吗?

注意:我需要通过特定IP联系外部服务的过程,我不一定需要从外部视图将这些IP分配给容器。

3 个答案:

答案 0 :(得分:2)

如我在Egress IP adress selection中所写:

  

可以帮助您解决问题的一件事是Istio Egress Gateway,所以我建议您研究一下。

     

否则,它仍然取决于特定的平台和部署集群的方式。例如,在AWS上,通过使用分配了弹性IP的实例来转发您的流量(无论是常规EC2还是AWS NAT网关),可以确保出口流量始终来自预定义的已知IP组。即使具有上述Egress,您仍需要为此定义一个固定IP的方法,因此必须使用AWS ElasticIP(或等效方法)。

答案 1 :(得分:1)

我会尝试一下。希望我能理解您的问题。您只需要从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中,在这种情况下,您可以简单地引用服务名称(您的外部系统)

答案 2 :(得分:0)

容器规范中的

hostNetwork=true将主机网络暴露给容器,并且容器可以访问网络接口:

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