将公共IP分配给在Kubernetes上运行的服务

时间:2018-05-04 05:39:55

标签: kubernetes

我有一个应用程序(比如说Integration-protocol-api) 而这个应用程序想与其他应用程序交谈,但这个应用程序位于另一个网络上(让我们称之为另一个集成协议)
问题是,在另一个集成协议方面,白名单存在,只允许从选定的IP地址连接到它。 但我的integration-protocol-api是Dockerized并在Kubernetes集群上运行,因此当我重新启动pod时,ip地址正在改变。 如何将Public和Static ip分配给我的Kubernetes Pod?

2 个答案:

答案 0 :(得分:3)

  

但是我的integration-protocol-api是Dockerized并在Kubernetes集群上运行,因此当我重新启动pod时,ip地址正在改变。如何将Public和Static ip分配给我的Kubernetes Pod

  • 有几种方法,具体取决于您的实际设置/需求,我会尝试在此处提供一些选项:

    • 将pod连接到特定节点,并通过服务公开该节点的IP地址。这将是这样的:

      # Quick deployment/pod manifest node selector (affinity is better)
      ...
      spec:
        nodeSelector:
          kubernetes.io/hostname: my-node-name
      ...
      # Service manifest 
      apiVersion: v1
      kind: Service
      metadata:
        name: svc-myservice
        labels:
          app: myapp
          tier: frontend
      spec:
        selector:
          app: myapp
          tier: frontend
        ports:
        - name: tcpserviceport
          protocol: TCP
          port: 8080
          targetPort: 80
        externalIPs:
        - 111.222.222.111
      

      Pod应位于同一名称空间中,通过节点选择器或关联性规则绑定到该节点,并且具有与选择器中相同的标签以供服务选择它。在此示例中,名为my-node-name的群集节点的IP地址应为111.222.222.111,并且可通过端口8080和该IP地址访问。

    • 如果适用,请仅通过入口和白名单进入公共IP来公开服务。根据您的命名空间分离,您可以使用服务名称(在命名空间范围内)或FQDN(例如:

      )通过相应的服务在入口中引用您的pod(无论它在哪里运行)
      <service-name>.<namespace-name>.svc.cluster.local
      
    • 以下是一些方法的概述,以便从kubernetes docs中更加说明:https://kubernetes.io/docs/tutorials/kubernetes-basics/expose-intro/

答案 1 :(得分:3)

pod使用它的节点IP地址作为源进行任何请求。因此,您可以将群集节点列入白名单&#39; IP地址,它应该可以工作。