我对GCP相对较新(<1年),我仍然在将各种服务映射到我现有的网络心理模型上。
一旦知道差距,我正在努力填补的是HTTP请求如何与我们的GKE集群中运行的服务进行负载平衡。
在测试群集上,我在提供HTTP的pod前面创建了一个服务:
apiVersion: v1
kind: Service
metadata:
name: contour
spec:
ports:
protocol: TCP
targetPort: 8080
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
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上侦听:
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的任何提及。
要了解LoadBalancer服务,首先必须了解NodePort服务。这些工作的方式是在集群中的每个节点上都有一个代理(通常实际上在iptables或ipvs中实现perf,但这是一个实现细节),并且在创建NodePort服务时,它选择一个未使用的端口并设置每个其中一个代理将数据包转发到您的Kubernetes pod。LoadBalancer服务构建于此之上,因此在GCP / GKE上,它创建了一个GCLB转发规则,将请求的端口映射到所有这些节点级代理的轮换。因此,GCLB侦听端口80,端口80代理随机节点上的某个随机端口,该端口代理到pod上的内部端口。
这个过程比这更容易定制,但这是基本的默认值。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。