【发布时间】:2019-01-07 05:40:38
【问题描述】:
我对 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.x.y.z 有自己的公共 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
<
如果我 ssh 进入 GKE 节点,我可以看到 kube-proxy 正在侦听服务节点端口(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 的任何提及。
【问题讨论】:
标签: kubernetes google-cloud-platform google-kubernetes-engine