Я относительно новичок (<1 года) в GCP, и я все еще в процессе сопоставления различных сервисов с моей существующей сетевой ментальной моделью. </p>
Однажды пробел в знаниях, который я пытаюсь заполнить, заключается в том, как HTTP-запросы сбалансированы по нагрузке для служб, работающих в наших кластерах GKE.
В тестовом кластере я создал службу перед модулями, которые обслуживают HTTP:
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. Он имеет собственный публичный IP-адрес 35.x.y.z и прослушивает порты 80-443:
![auto load balancer](https://i.stack.imgur.com/VAimU.png)
Керлинг 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.