3.5. 第 5 步 - 配置您的网关策略和 HTTP 路由
虽然您的网关现已部署,但它没有公开的端点,且您的 HTTPS 侦听器没有被编程。接下来,您可以设置一个 TLSPolicy,它利用您的 CertificateIssuer 设置 HTTPS 侦听器证书。
您将定义一个 AuthPolicy,它将为任何未保护的端点设置默认的 HTTP 403 响应,以及一个 RateLimitPolicy,它将设置默认的 artificially low 全局限制,以进一步保护此网关公开的任何端点。
您还将使用负载平衡策略定义 DNSPolicy,以及用于网关的 HTTPRoute 与后端应用程序 API 通信。
3.5.1. 设置 TLS 策略 复制链接链接已复制到粘贴板!
流程
为您的网关设置
TLSPolicy,如下所示:kubectl apply -f - <<EOF apiVersion: kuadrant.io/v1 kind: TLSPolicy metadata: name: ${gatewayName}-tls namespace: ${gatewayNS} spec: targetRef: name: ${gatewayName} group: gateway.networking.k8s.io kind: Gateway issuerRef: group: cert-manager.io kind: ClusterIssuer name: ${clusterIssuerName} EOF检查控制器是否接受了您的 TLS 策略,如下所示:
kubectl get tlspolicy ${gatewayName}-tls -n ${gatewayNS} -o=jsonpath='{.status.conditions[?(@.type=="Accepted")].message}'
3.5.2. 设置 Auth 策略 复制链接链接已复制到粘贴板!
流程
为您的网关设置默认 deny-all
AuthPolicy,如下所示:kubectl apply -f - <<EOF apiVersion: kuadrant.io/v1 kind: AuthPolicy metadata: name: ${gatewayName}-auth namespace: ${gatewayNS} spec: targetRef: group: gateway.networking.k8s.io kind: Gateway name: ${gatewayName} defaults: rules: authorization: "deny": opa: rego: "allow = false" EOF检查控制器是否接受您的 auth 策略,如下所示:
kubectl get authpolicy ${gatewayName}-auth -n ${gatewayNS} -o=jsonpath='{.status.conditions[?(@.type=="Accepted")].message}'
3.5.3. 设置速率限制策略 复制链接链接已复制到粘贴板!
流程
为您的网关设置默认
RateLimitPolicy,如下所示:kubectl apply -f - <<EOF apiVersion: kuadrant.io/v1 kind: RateLimitPolicy metadata: name: ${gatewayName}-rlp namespace: ${gatewayNS} spec: targetRef: group: gateway.networking.k8s.io kind: Gateway name: ${gatewayName} defaults: limits: "low-limit": rates: - limit: 2 window: 10s EOF注意根据您的集群应用
RateLimitPolicy可能需要几分钟时间。本例中的限制非常低,可轻松地显示它。要检查您的速率限值已被接受,请输入以下命令:
kubectl get ratelimitpolicy ${gatewayName}-rlp -n ${gatewayNS} -o=jsonpath='{.status.conditions[?(@.type=="Accepted")].message}'
3.5.4. 设置 DNS 策略 复制链接链接已复制到粘贴板!
流程
为您的网关设置
DNSPolicy,如下所示:kubectl apply -f - <<EOF apiVersion: kuadrant.io/v1 kind: DNSPolicy metadata: name: ${gatewayName}-dnspolicy namespace: ${gatewayNS} spec: targetRef: name: ${gatewayName} group: gateway.networking.k8s.io kind: Gateway providerRefs: - name: aws-credentials loadBalancing: weight: 120 geo: EU defaultGeo: true EOF注意DNSPolicy将使用您之前定义的 DNS ProviderSecret。本例中的地理位置是EU,但您可以更改它以符合您的要求。检查您的
DNSPolicy是否已接受,如下所示:kubectl get dnspolicy ${gatewayName}-dnspolicy -n ${gatewayNS} -o=jsonpath='{.status.conditions[?(@.type=="Accepted")].message}'
3.5.5. 创建 HTTP 路由 复制链接链接已复制到粘贴板!
出于测试目的,本节假定部署了 toystore 应用。如需更多信息,请参阅 第 4 章 连接链接应用程序开发人员工作流。
流程
创建一个
HTTPRoute以测试您的网关,如下所示:kubectl apply -f - <<EOF apiVersion: gateway.networking.k8s.io/v1 kind: HTTPRoute metadata: name: test namespace: ${gatewayNS} labels: service: toystore spec: parentRefs: - name: ${gatewayName} namespace: ${gatewayNS} hostnames: - "test.${rootDomain}" rules: - backendRefs: - name: toystore port: 80 EOF检查您的网关策略是否强制实施,如下所示:
kubectl get dnspolicy ${gatewayName}-dnspolicy -n ${gatewayNS} -o=jsonpath='{.status.conditions[?(@.type=="Enforced")].message}' kubectl get authpolicy ${gatewayName}-auth -n ${gatewayNS} -o=jsonpath='{.status.conditions[?(@.type=="Enforced")].message}' kubectl get ratelimitpolicy ${gatewayName}-rlp -n ${gatewayNS} -o=jsonpath='{.status.conditions[?(@.type=="Enforced")].message}'检查您的 HTTPS 侦听器是否已就绪,如下所示:
kubectl get gateway ${gatewayName} -n ${gatewayNS} -o=jsonpath='{.status.listeners[0].conditions[?(@.type=="Programmed")].message}'