如何使用外部IP保护来自到达ClusterIP服务的流量的源IP?

时间:2017-02-27 00:25:26

标签: network-programming kubernetes google-compute-engine google-kubernetes-engine

我目前有一个看起来像这样的服务:

Paulw11

我可以从绑定到VM的外部IP接收流量,但所有请求都由HTTP接收,源IP switch(recognizer.state) { case .began: let velocity = recognizer.velocity(in: self.view) if (velocity.x > velocity.y) && (velocity.x > 0) { print("moving right") myBlocks[objectDragging].center.y = CGFloat(initPosy) movingRight = true } else if ((abs(velocity.x)) > velocity.y) && (velocity.x < 0) { print("moving left") myBlocks[objectDragging].center.y = CGFloat(initPosy) movingLeft = true } else if (velocity.y > velocity.x) && (velocity.y > 0) { print("moving down") myBlocks[objectDragging].center.x = CGFloat(initPosx) movingDown = true } else if ((abs(velocity.y)) > velocity.x) && (velocity.y < 0){ print("moving up") myBlocks[objectDragging].center.x = CGFloat(initPosx) print(abs(velocity.y)) movingUp = true } case .changed: if (movingRight == true) { myBlocks[objectDragging].center.y = CGFloat(initPosy) } else if (movingLeft == true) { myBlocks[objectDragging].center.y = CGFloat(initPosy) } else if (movingDown == true) { myBlocks[objectDragging].center.x = CGFloat(initPosx) } else if (movingUp == true) { myBlocks[objectDragging].center.x = CGFloat(initPosx) } case .ended: movingUp = false movingLeft = false movingRight = false movingDown = false ,这绝对是内部IP - 即使我连接到来自群集外部的VM的外部IP。

如何在不设置负载均衡器或入口的情况下获取请求的真实源IP?

2 个答案:

答案 0 :(得分:1)

实现起来并不简单 - 由于kube-proxy的工作方式,您的流量可以在节点到达支持您服务的Pod之前在节点之间转发。

您可以使用一些测试版注释来解决此问题,特别是service.beta.kubernetes.io/external-traffic: OnlyLocal

文档中的更多信息,请访问:https://kubernetes.io/docs/tutorials/services/source-ip/#source-ip-for-services-with-typeloadbalancer

但这不符合您不需要LoadBalancer的额外要求。你能否扩展一下你不想参与LoadBalancer的原因?

答案 1 :(得分:1)

如果您只有一个广告连播,则可以使用hostNetwork: true来实现此目标:

apiVersion: apps/v1beta1
kind: Deployment
metadata:
  name: caddy
spec:
  replicas: 1
  template:
    metadata:
      labels:
        app: caddy
    spec:
      hostNetwork: true # <---------
      containers:
      - name: caddy
        image: your_image
        env:
        - name: STATIC_BACKEND # example env in my custom image
          value: $(STATIC_SERVICE_HOST):80

请注意,通过执行此操作您的pod将继承主机的DNS解析器,而不是Kubernetes&#39;。这意味着您无法再通过DNS名称解析群集服务。例如,在上面的示例中,您无法访问http://static处的static服务。您仍然可以通过其environment variables注入的群集IP访问服务。