开发者社区> 问答> 正文

GCP负载均衡器如何将流量路由到GKE服务?

k8s小能手 2019-01-11 13:41:55 481

我对GCP相对较新(<1年),我仍然在将各种服务映射到我现有的网络心理模型上。

一旦知道差距,我正在努力填补的是HTTP请求如何与我们的GKE集群中运行的服务进行负载平衡。

在测试群集上,我在提供HTTP的pod前面创建了一个服务:

apiVersion: v1
kind: Service
metadata:
name: contour
spec:
ports:

  • port: 80
    name: http

protocol: TCP
targetPort: 8080

  • port: 443
    name: https

protocol: TCP
targetPort: 8443
selector:
app: contour
type: LoadBalancer
该服务正在侦听节点端口30472和30816:

$ kubectl get svc contour
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
contour LoadBalancer 10.63.241.69 35.x.y.z 80:30472/TCP,443:30816/TCP 41m
将自动为我创建GCP网络负载平衡器。它在35.xyz有自己的公共IP,正在侦听端口80-443:
卷曲负载均衡器IP有效:

$ curl -q -v 35.x.y.z

  • TCP_NODELAY set
  • Connected to 35.x.y.z (35.x.y.z) port 80 (#0)

GET / HTTP/1.1
Host: 35.x.y.z
User-Agent: curl/7.62.0
Accept: /

< HTTP/1.1 404 Not Found

< date: Mon, 07 Jan 2019 05:33:44 GMT
< server: envoy
< content-length: 0
<
如果我进入GKE节点,我可以看到kube-proxy正在侦听服务nodePorts(30472和30816),并且没有任何东西在端口80或443上侦听:

netstat -lntp

Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 127.0.0.1:20256 0.0.0.0:* LISTEN 1022/node-problem-d
tcp 0 0 127.0.0.1:10248 0.0.0.0:* LISTEN 1221/kubelet
tcp 0 0 127.0.0.1:10249 0.0.0.0:* LISTEN 1369/kube-proxy
tcp 0 0 0.0.0.0:5355 0.0.0.0:* LISTEN 297/systemd-resolve
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 330/sshd
tcp6 0 0 :::30816 :::* LISTEN 1369/kube-proxy
tcp6 0 0 :::4194 :::* LISTEN 1221/kubelet
tcp6 0 0 :::30472 :::* LISTEN 1369/kube-proxy
tcp6 0 0 :::10250 :::* LISTEN 1221/kubelet
tcp6 0 0 :::5355 :::* LISTEN 297/systemd-resolve
tcp6 0 0 :::10255 :::* LISTEN 1221/kubelet
tcp6 0 0 :::10256 :::* LISTEN 1369/kube-proxy
两个问题:

鉴于节点上没有任何东西正在侦听端口80或443,负载均衡器是否将流量引导到端口30472和30816?
如果负载均衡器正在接受80/443上的流量并转发到30472/30816,那么在哪里可以看到该配置?点击负载均衡器屏幕,我看不到端口30472和30816的任何提及。

负载均衡 网络协议 Python Perl
分享到
取消 提交回答
全部回答(1)
  • k8s小能手
    2019-07-17 23:25:17

    要了解LoadBalancer服务,首先必须了解NodePort服务。这些工作的方式是在集群中的每个节点上都有一个代理(通常实际上在iptables或ipvs中实现perf,但这是一个实现细节),并且在创建NodePort服务时,它选择一个未使用的端口并设置每个其中一个代理将数据包转发到您的Kubernetes pod。LoadBalancer服务构建于此之上,因此在GCP / GKE上,它创建了一个GCLB转发规则,将请求的端口映射到所有这些节点级代理的轮换。因此,GCLB侦听端口80,端口80代理随机节点上的某个随机端口,该端口代理到pod上的内部端口。

    这个过程比这更容易定制,但这是基本的默认值。

    0 0

集结各类场景实战经验,助你开发运维畅行无忧

推荐文章
相似问题