Ram*_*sXu 6 load-balancing google-cloud-platform kubernetes google-kubernetes-engine
我在 GKE 中创建了一个类型为:LoadBalancer 的 kubernetes 服务。
apiVersion: v1
kind: Service
metadata:
name: nginx
spec:
type: LoadBalancer
ports:
- name: http
port: 80
targetPort: http
selector:
app: nginx
Run Code Online (Sandbox Code Playgroud)
这是一个 nginx 服务并尝试获取原始客户端 IP。喜欢
location / {
echo $remote_addr;
echo $http_x_forwarded_for;
}
Run Code Online (Sandbox Code Playgroud)
但结果会得到:
10.140.0.97
Run Code Online (Sandbox Code Playgroud)
$remote_addr
就像在 kubernetes IP 中一样。
$http_x_forwarded_for
是空的。
我不知道为什么这不像文件所说的那样。
https://cloud.google.com/load-balancing/docs/network
网络负载平衡是一个直通负载平衡器,这意味着您的防火墙规则必须允许来自客户端源 IP 地址的流量。
https://cloud.google.com/kubernetes-engine/docs/concepts/network-overview#ext-lb
如果您的服务需要从集群外部和 VPC 网络外部访问,您可以通过在定义服务时将服务的类型字段设置为 LoadBalancer 将您的服务配置为负载均衡器。然后,GKE 在服务前预置网络负载均衡器。网络负载均衡器了解集群中的所有节点,并配置您的 VPC 网络的防火墙规则,以允许使用服务的外部 IP 地址从 VPC 网络外部连接到服务。您可以为服务分配一个静态外部 IP 地址。有关详细信息,请访问使用静态 IP 地址配置域名。
Ram*_*sXu 11
只需添加 externalTrafficPolicy: Local
spec:
externalTrafficPolicy: Local
type: LoadBalancer
Run Code Online (Sandbox Code Playgroud)
默认情况下,发送到 Type=LoadBalancer 的服务的数据包是源 NAT 的,因为处于就绪状态的所有可调度 Kubernetes 节点都符合负载平衡流量的条件。因此,如果数据包到达没有端点的节点,系统会将其代理到具有端点的节点,将数据包上的源 IP 替换为节点的 IP(如上一节所述)。
归档时间: |
|
查看次数: |
734 次 |
最近记录: |