3.5. 第 5 步 - 配置您的网关策略和 HTTP 路由


虽然您的网关现已部署,但它没有公开的端点,且您的 HTTPS 侦听器没有被编程。接下来,您可以设置一个 TLSPolicy,它利用您的 CertificateIssuer 设置 HTTPS 侦听器证书。

您将定义一个 AuthPolicy,它将为任何未保护的端点设置默认的 HTTP 403 响应,以及一个 RateLimitPolicy,它将设置默认的 artificially low 全局限制,以进一步保护此网关公开的任何端点。

您还将使用负载平衡策略定义 DNSPolicy,以及用于网关的 HTTPRoute 与后端应用程序 API 通信。

3.5.1. 设置 TLS 策略

流程

  1. 为您的网关设置 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
    Copy to Clipboard Toggle word wrap
  2. 检查控制器是否接受了您的 TLS 策略,如下所示:

    kubectl get tlspolicy ${gatewayName}-tls -n ${gatewayNS} -o=jsonpath='{.status.conditions[?(@.type=="Accepted")].message}'
    Copy to Clipboard Toggle word wrap

3.5.2. 设置 Auth 策略

流程

  1. 为您的网关设置默认 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
    Copy to Clipboard Toggle word wrap
  2. 检查控制器是否接受您的 auth 策略,如下所示:

    kubectl get authpolicy ${gatewayName}-auth -n ${gatewayNS} -o=jsonpath='{.status.conditions[?(@.type=="Accepted")].message}'
    Copy to Clipboard Toggle word wrap

3.5.3. 设置速率限制策略

流程

  1. 为您的网关设置默认 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
    Copy to Clipboard Toggle word wrap
    注意

    根据您的集群应用 RateLimitPolicy 可能需要几分钟时间。本例中的限制非常低,可轻松地显示它。

  2. 要检查您的速率限值已被接受,请输入以下命令:

    kubectl get ratelimitpolicy ${gatewayName}-rlp -n ${gatewayNS} -o=jsonpath='{.status.conditions[?(@.type=="Accepted")].message}'
    Copy to Clipboard Toggle word wrap

3.5.4. 设置 DNS 策略

流程

  1. 为您的网关设置 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
    Copy to Clipboard Toggle word wrap
    注意

    DNSPolicy 将使用您之前定义的 DNS Provider Secret本例中的 地理位置是 EU,但您可以更改它以符合您的要求。

  2. 检查您的 DNSPolicy 是否已接受,如下所示:

    kubectl get dnspolicy ${gatewayName}-dnspolicy -n ${gatewayNS} -o=jsonpath='{.status.conditions[?(@.type=="Accepted")].message}'
    Copy to Clipboard Toggle word wrap

3.5.5. 创建 HTTP 路由

注意

出于测试目的,本节假定部署了 toystore 应用。如需更多信息,请参阅 第 4 章 连接链接应用程序开发人员工作流

流程

  1. 创建一个 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
    Copy to Clipboard Toggle word wrap
  2. 检查您的网关策略是否强制实施,如下所示:

    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}'
    Copy to Clipboard Toggle word wrap
  3. 检查您的 HTTPS 侦听器是否已就绪,如下所示:

    kubectl get gateway ${gatewayName} -n ${gatewayNS} -o=jsonpath='{.status.listeners[0].conditions[?(@.type=="Programmed")].message}'
    Copy to Clipboard Toggle word wrap
返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

Theme

© 2025 Red Hat