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/
步骤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