9、Gateway
您必须连接到正确的主机。不这样做可能导致零分。
student@k8s-master1\] $ ssh cka000000 Task 将现有 ****Web**** 应用程序从 ****Ingress**** 迁移到 ****Gateway API**** 。您必须****维护 HTTPS**** 访问权限。注意:集群中安装了一个名为 ****nginx**** 的 ****GatewayClass**** 。 首先,创建一个名为 ****web-gateway**** 的 ****Gateway**** ,主机名为 ****gateway.web.k8s.local**** ,并保持现有名为 ****web**** 的 ****Ingress**** 资源的****现有 TLS**** 和侦听器配置。 接下来,创建一个名为 ****web-route**** 的 ****HTTPRoute**** ,主机名为 ****gateway.web.k8s.local**** ,并保持现有名为****web**** 的 ****Ingress**** 资源的现有路由规则。 最后,删除名为 ****web**** 的现有 ****Ingress**** 资源。 参考链接 [https://kubernetes.io/docs/concepts/services-networking/gateway/](https://kubernetes.io/docs/concepts/services-networking/gateway/ "https://kubernetes.io/docs/concepts/services-networking/gateway/") ``` 步骤1 kubectl get ingress web -o yaml > web-ingress.yaml ``` **步骤2** 创建 Gateway vim gateway.yaml ```bash apiVersion: gateway.networking.k8s.io/v1 # 使用的 Gateway API 版本(v1 稳定版) kind: Gateway # 资源类型:网关入口 metadata: name: web-gateway # Gateway 资源名称 spec: gatewayClassName: nginx # 指定使用的 Gateway 实现类(这里用 nginx 网关控制器) listeners: # 监听器列表,定义网关如何接收流量 - name: https # 监听器名称(必须唯一) hostname: gateway.web.k8s.local # 该监听器匹配的域名(严格匹配) port: 443 # 监听的端口号 protocol: HTTPS # 协议类型(HTTPS,需配置 TLS) tls: # TLS 配置段 mode: Terminate # TLS 模式:在网关侧终止 HTTPS 连接 certificateRefs: # 证书引用列表 - name: web-cert # 证书对应的 Secret 名称 kind: Secret # 引用的资源类型(固定为 Secret) group: "" # API 组(空字符串表示核心 API 组) ``` **步骤3**创建 kubectl apply -f gateway.yaml 提示 created,表示创建成功 **步骤4**.创建 HTTPRoute vim httproute.yaml ```bash apiVersion: gateway.networking.k8s.io/v1 # Gateway API 版本(v1 稳定版) kind: HTTPRoute # 资源类型:HTTP 路由规则 metadata: name: web-route # 路由规则名称 spec: parentRefs: # 父资源引用,指定该路由附加到哪个 Gateway - name: web-gateway # 引用的 Gateway 名称(与上面创建的 Gateway 对应) hostnames: # 该路由匹配的域名列表 - "gateway.web.k8s.local" # 完全匹配此主机名(需与 Gateway listener 的 hostname 一致) rules: # 路由规则列表 - matches: # 匹配条件(可多个) - path: # 路径匹配规则 type: PathPrefix # 匹配类型:前缀匹配(PathPrefix) value: / # 匹配的路径值(根路径 "/") backendRefs: # 后端服务引用列表 - name: web # 后端 Service 名称(与 Ingress 中的 service name 对应) port: 80 # 后端 Service 端口号(与 Ingress 中的 service port 对应) ``` **步骤5**创建 kubectl apply -f httproute.yaml 提示 created,表示创建成功 检查 kubectl get httproute **步骤6**删除 web ingress kubectl delete ingress web