Cka-2026-gateway解释
一、Gateway 修改原因
1. metadata.name: example-gateway → web-gateway
· 原因:题目要求创建一个名叫 web-gateway 的网关。名字必须与题目一致,因为后面 HTTPRoute 要通过这个名字来引用它。
2. gatewayClassName: example-class → nginx
· 原因:gatewayClassName 指定集群中实际运行的是哪个网关控制器(比如 Nginx、Envoy、Istio 等)。example-class 只是一个示例名字,不指向任何真实控制器;改成 nginx 表示你要使用 Nginx Gateway 实现(前提是集群已安装对应的 GatewayClass)。
3. 监听器从 http:80 改为 https:443,并增加 hostname 和 tls
· 原因:
· 原来的 protocol: HTTP、port: 80 是明文传输,不安全。题目要求对外暴露服务,通常需要 HTTPS 加密。
· port: 443 是 HTTPS 的标准端口,浏览器访问时不需要手动写端口号。
· hostname: gateway.web.k8s.local:严格限定只处理这个域名的请求,避免其他域名的流量误入。
· tls 配置:既然要处理 HTTPS,就必须有证书来解密。mode: Terminate 表示网关自己解密(而不是透传给后端)。certificateRefs 指向存有证书的 Secret web-cert。
简单说:改这些是因为题目要的是一个安全的、绑定特定域名的 HTTPS 入口。
---
二、HTTPRoute 修改原因
1. metadata.name: example-httproute → web-route
· 原因:题目明确要求路由资源名为 web-route,保持唯一性和可识别性。
2. parentRefs[0].name: example-gateway → web-gateway
· 原因:这条路由要挂载到刚才创建的 web-gateway 上,而不是旧的 example-gateway。parentRefs 就是用来建立路由与网关的关联的。
3. hostnames: "www.example.com" → "gateway.web.k8s.local"
· 原因:网关只监听 gateway.web.k8s.local 这个域名,所以路由必须声明同一个域名,否则请求会被拒绝。域名不一致就无法匹配。
4. matches[0].path.value: /login → /
· 原因:原示例只匹配 /login 路径,意味着只有访问 /login 才会被转发。题目要求的是“所有路径”(相当于 Ingress 里的 paths: /),所以改成根路径 /。PathPrefix 类型下,/ 匹配所有请求。
5. backendRefs.name: example-svc → web
· 原因:后端服务名字变了,题目要求转发给名为 web 的 Service(而不是 example-svc)。这是实际业务服务的名称。
6. backendRefs.port: 8080 → 80
· 原因:目标 Service web 监听的端口是 80(常见 HTTP 端口),而不是 8080。端口必须匹配 Service 的定义,否则流量发不过去。
---
三、整体逻辑串联
1. 网关定义入口:用 web-gateway 在 443 端口、域名 gateway.web.k8s.local 上接收 HTTPS 请求,证书从 web-cert 获取。
2. 路由定义转发:用 web-route 挂载到 web-gateway,对所有路径(/)的请求,转发到 web Service 的 80 端口。
3. 所有名字、域名、端口、路径都必须前后一致,否则流量无法正常流入后端。
一句话总结修改原因:题目要求的是一个特定的 HTTPS 网关加全路径路由,因此要把示例中的占位符(example-xxx、/login、8080、HTTP 等)全部换成题目给出的真实值。
