kubernetes - 网关端口定义如何工作?
问题描述
我在 AKS 上有一个带有默认入口网关的示例 istio 集群。一切都按预期工作我只是想了解如何。网关定义如下:
apiVersion: networking.istio.io/v1alpha3
kind: Gateway
metadata:
name: my-gateway
namespace: some-config-namespace
spec:
selector:
app: istio-ingressgateway
servers:
- port:
number: 80
name: http
protocol: HTTP
hosts:
- uk.bookinfo.com
- eu.bookinfo.com
tls:
httpsRedirect: true # sends 301 redirect for http requests
- port:
number: 443
name: https-443
protocol: HTTPS
hosts:
- uk.bookinfo.com
- eu.bookinfo.com
tls:
mode: SIMPLE # enables HTTPS on this port
serverCertificate: /etc/certs/servercert.pem
privateKey: /etc/certs/privatekey.pem
在https://uk.bookinfo.com上访问该网站可以正常工作。但是,当我查看进入 ingressgateway pod 的 LB 和 Service 时,我看到:
LB-IP:443 -> CLUSTER-IP:443 -> istio-ingressgateway:8443
kind: Service
spec:
ports:
- name: http2
protocol: TCP
port: 80
targetPort: 8080
nodePort: 30804
- name: https
protocol: TCP
port: 443
targetPort: 8443
nodePort: 31843
selector:
app: istio-ingressgateway
istio: ingressgateway
clusterIP: 10.2.138.74
type: LoadBalancer
由于 istio-ingressgateway pod 的 targetPort 是8443 ,那么将端口号定义为443的网关定义如何工作?
解决方案
正如这里提到的
端口:此服务的端口
targetPort:Pod 上的目标端口,用于将流量转发到
据我所知targetPort: 8443
,指向特使边车,所以如果我理解正确,特使在 8080 上监听 http,在 8443 上监听 https。
特使文档中有一个示例。
所以它是这样的:
LB-IP:443 -> CLUSTER-IP:443 -> istio-ingressgateway:443 -> envoy-sidecar:8443
LB-IP:80 -> CLUSTER-IP:80 -> istio-ingressgateway:80 -> envoy-sidecar:8080
例如,对于 http,如果您在未配置任何网关的情况下使用 netstat 检查 ingress-gateway pod,则端口 8080 上没有任何监听:
kubectl exec -ti istio-ingressgateway-86f88b6f6-r8mjt -n istio-system -c istio-proxy -- /bin/bash
istio-proxy@istio-ingressgateway-86f88b6f6-r8mjt:/$ netstat -lnt | grep 8080
现在让我们使用下面的 yaml 创建一个 http 网关。
apiVersion: networking.istio.io/v1beta1
kind: Gateway
metadata:
name: istio-gw
namespace: istio-system
spec:
selector:
istio: ingressgateway
servers:
- port:
number: 80
name: http
protocol: HTTP
hosts:
- "*"
并再次检查 netstat:
kubectl exec -ti istio-ingressgateway-86f88b6f6-r8mjt -n istio-system -c istio-proxy -- /bin/bash
istio-proxy@istio-ingressgateway-86f88b6f6-r8mjt:/$ netstat -lnt | grep 8080
tcp 0 0 0.0.0.0:8080 0.0.0.0:* LISTEN
如您所见,我们在端口 80 上配置了网关,但在 ingressgateway 内部,我们可以看到它正在侦听端口 8080。
推荐阅读
- apache-spark - 对最后一个函数 pyspark 应用过滤器
- include - 包括旧版游戏机
- java - Spring Boot 扫描依赖包的问题
- visual-studio - Nuget 包无法在新安装的 VS 中正确安装
- apache-spark - 如何在 Pyspark Dataframe 中创建多列的所有成对组合?
- amazon-web-services - 当我尝试发布 MQtt 消息时,为什么 iot_thread 堆栈溢出?
- php - PHP cURL 在 CONNECT 后从代理收到 HTTP 代码 407
- r - 如何使用 dplyr 包在 R 中进行组分离线性回归?
- macos - 升级到 Mac OS "BigSur" 后 Samba 共享为只读
- android - 堆栈跟踪不适用于 Google Play 控制台中的 ANR