你能在Kubernetes中使用1个pod/node/container 1负载均衡器吗



作为一个学习项目,我目前在Kubernetes中运行了一个蜜罐,它运行良好。(唯一令人难过的是,我看不到实际的SRC IP,因为从K8s的角度来看,一切都来自负载均衡器(。

我想制作一个蜜罐集群,并最终制作一个ELK后端,所有日志都将发送到该后端,并将其中的一些可视化。现在我似乎不知道如何为不同的容器使用具有不同端口的1个负载均衡器。有没有更好的方法来解决这个问题?我有点理解1服务1负载均衡器的问题,但我确信我不是唯一一个面临这个问题的人?

感谢您的帮助。提前谢谢。

当谈到在使用外部负载均衡器时保留客户端的源IP时,kubernetes官方文档的这一片段应该完全回答您的问题:

保留客户端源IP

由于实现了此功能目标容器是,而不是客户端的原始源IP。到启用客户端IP的保留,以下字段可以在服务规范中配置(在GCE/Google Kubernetes中支持发动机环境(:

  • service.spec.externalTrafficPolicy-表示此服务是否希望将外部流量路由到本地节点或集群范围端点。有两个可用选项:群集(默认(和地方的群集会遮挡客户端源IP,并可能导致第二个跳到另一个节点,但应该具有良好的整体负载分布。本地保留客户端源IP,并避免LoadBalancer和NodePort类型的服务,但存在潜在风险不平衡的流量扩散
  • service.spec.healthCheckNodePort-指定服务的运行状况检查节点端口(数字端口号(。如果未指定healthCheckNodePort,服务控制器从集群的NodePort范围中分配一个端口。您可以配置通过设置API服务器命令行选项,--service-node-port-range。它将使用用户指定的healthCheckNodePort值(如果由客户端指定(。它只有当CCD_ 6被设置为LoadBalancer并且externalTrafficPolicy被设置为本地

在服务中将externalTrafficPolicy设置为本地配置文件将激活此功能。

apiVersion: v1
kind: Service
metadata:
name: example-service
spec:
selector:
app: example
ports:
- port: 8765
targetPort: 9376
externalTrafficPolicy: Local ### 👈
type: LoadBalancer

关键是将externalTrafficPolicy设置为Local,它应该完全解决您保留原始源IP的问题,但请记住,此设置也有一些缺点。这可能会导致交通不那么均衡。正如你可以在这个片段中特别阅读的那样:

有两个可用选项:Cluster(默认(和LocalCluster会遮挡客户端源IP,并可能导致第二次跳到另一个节点,但应具有良好的整体负载分布Local保留客户端源IP,并避免LoadBalancer和NodePort类型服务的第二跳,但存在潜在的不平衡流量传播风险