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 资源的现有路由规则。您可以使用以下命令测试 Gateway API 配置[candidatecka000057]$curl -Lk https://gateway.web.k8s.local:31443最后删除名为web的现有 Ingress 资源。参考链接需要复制官网网页的内容尽量看英文网站实在看不懂英文的在 K8S 网站最右上角可以选择中文依次点击 Concepts → Services, Load Balancing, and Networking → Gateway API → Gateway和 Concepts → Services, Load Balancing, and Networking → Gateway API → HTTPRoutehttps://kubernetes.io/docs/concepts/services-networking/gateway/Gateway 有一个比较好的网址可以背过。如果背不过网址那么就记住上面网址和 Gateway 里要背的 yaml 内容。https://kubernetes.io/blog/2024/05/09/gateway-api-v1-1/检查现有的 ingress确定一些必要信息查看里面的 tls secretName下一步创建 Gateway 时需要查看里面的 paths path 和 service name 和 port number再一步创建 HTTPRoute 时需要kubectl get ingress web -o yaml创建 Gatewayvim 和 kubectl edit 后要先执行 :set paste 再按 i 插入vim gateway.yaml添加如下全部内容红色是需要格外注意的。apiVersion: gateway.networking.k8s.io/v1 kind: Gateway metadata: name: web-gateway spec: gatewayClassName: nginx #通过题目里的这句话得知 集群中安装了一个名为 nginx 的 GatewayClass listeners: - name: https protocol: HTTPS #这里一定要是 HTTPS port: 443 # 这个就是默认的 443不需要改 hostname: gateway.web.k8s.local #填写题目里要求的主机名 tls: certificateRefs: - kind: Secret group: name: web-cert # 填写 ingress 里的 TLS secretName创建kubectl apply -f gateway.yaml提示 created表示创建成功检查kubectl get gateway创建 HTTPRoutevim 和 kubectl edit 后要先执行 :set paste 再按 i 插入vim httproute.yaml添加如下全部内容红色是需要格外注意的apiVersion: gateway.networking.k8s.io/v1 kind: HTTPRoute metadata: name: web-route spec: parentRefs: - name: web-gateway #上面创建的 Gateway 名字 hostnames: - gateway.web.k8s.local #题目要求的主机名 rules: - matches: - path: type: PathPrefix value: / # ingress 里的 paths path backendRefs: - name: web # ingress 里的 service name port: 80 # ingress 里的 service port number创建kubectl apply -f httproute.yaml提示 created表示创建成功检查kubectl get httproute测试 Gateway API 配置这个命令是题目里给你的你只需要原封不动的复制执行用来检测结果的。至于这条命令里的端口你无需关注跟你上面 yaml 里写的 443无任何关系。curl -Lk https://gateway.web.k8s.local:31443删除 web ingresskubectl delete ingress web