6.3. 部署示例应用程序


  1. 为我们的示例应用程序创建一个新项目:

    $ oc new-project hello-world
    Copy to Clipboard Toggle word wrap
  2. 部署 hello world 应用程序:

    $ oc new-app -n hello-world --image=docker.io/openshift/hello-openshift
    Copy to Clipboard Toggle word wrap
  3. 将预先创建的 service 资源转换为 NodePort 服务类型:

    $ oc -n hello-world patch service hello-openshift -p '{"spec":{"type":"NodePort"}}'
    Copy to Clipboard Toggle word wrap
  4. 使用 AWS Load Balancer Operator 部署 AWS ALB:

    $ cat << EOF | oc apply -f -
    apiVersion: networking.k8s.io/v1
    kind: Ingress
    metadata:
      name: hello-openshift-alb
      namespace: hello-world
      annotations:
        alb.ingress.kubernetes.io/scheme: internet-facing
    spec:
      ingressClassName: alb
      rules:
        - http:
            paths:
              - path: /
                pathType: Exact
                backend:
                  service:
                    name: hello-openshift
                    port:
                      number: 8080
    EOF
    Copy to Clipboard Toggle word wrap
  5. curl AWS ALB Ingress 端点,以验证 hello world 应用程序是否可以访问:

    注意

    AWS ALB 置备需要几分钟时间。如果您收到一个错误,显示 curl: (6) Could not resolve host,请等待并重试。

    $ INGRESS=$(oc -n hello-world get ingress hello-openshift-alb -o jsonpath='{.status.loadBalancer.ingress[0].hostname}')
    $ curl "http://${INGRESS}"
    Copy to Clipboard Toggle word wrap

    输出示例

    Hello OpenShift!
    Copy to Clipboard Toggle word wrap

6.3.1. 配置 AWS WAF

AWS WAF 服务是一个 Web 应用程序防火墙,可让您监控、保护和控制转发到您受保护的 Web 应用程序资源的 HTTP 和 HTTPS 请求,如 Red Hat OpenShift Service on AWS。

  1. 创建 AWS WAF 规则文件以应用到我们的 Web ACL:

    $ cat << EOF > ${SCRATCH}/waf-rules.json
    [
        {
          "Name": "AWS-AWSManagedRulesCommonRuleSet",
          "Priority": 0,
          "Statement": {
            "ManagedRuleGroupStatement": {
              "VendorName": "AWS",
              "Name": "AWSManagedRulesCommonRuleSet"
            }
          },
          "OverrideAction": {
            "None": {}
          },
          "VisibilityConfig": {
            "SampledRequestsEnabled": true,
            "CloudWatchMetricsEnabled": true,
            "MetricName": "AWS-AWSManagedRulesCommonRuleSet"
          }
        },
        {
          "Name": "AWS-AWSManagedRulesSQLiRuleSet",
          "Priority": 1,
          "Statement": {
            "ManagedRuleGroupStatement": {
              "VendorName": "AWS",
              "Name": "AWSManagedRulesSQLiRuleSet"
            }
          },
          "OverrideAction": {
            "None": {}
          },
          "VisibilityConfig": {
            "SampledRequestsEnabled": true,
            "CloudWatchMetricsEnabled": true,
            "MetricName": "AWS-AWSManagedRulesSQLiRuleSet"
          }
        }
    ]
    EOF
    Copy to Clipboard Toggle word wrap

    这将启用 Core (Common)和 SQL AWS Managed Rule Sets。

  2. 使用以上指定的规则创建一个 AWS WAF Web ACL:

    $ WAF_ARN=$(aws wafv2 create-web-acl \
      --name ${CLUSTER}-waf \
      --region ${REGION} \
      --default-action Allow={} \
      --scope REGIONAL \
      --visibility-config SampledRequestsEnabled=true,CloudWatchMetricsEnabled=true,MetricName=${CLUSTER}-waf-metrics \
      --rules file://${SCRATCH}/waf-rules.json \
      --query 'Summary.ARN' \
      --output text)
    Copy to Clipboard Toggle word wrap
  3. 使用 AWS WAF Web ACL ARN 注解 Ingress 资源:

    $ oc annotate -n hello-world ingress.networking.k8s.io/hello-openshift-alb \
      alb.ingress.kubernetes.io/wafv2-acl-arn=${WAF_ARN}
    Copy to Clipboard Toggle word wrap
  4. 等待 10 秒,以便规则传播并测试应用程序是否仍然可以正常工作:

    $ curl "http://${INGRESS}"
    Copy to Clipboard Toggle word wrap

    输出示例

    Hello OpenShift!
    Copy to Clipboard Toggle word wrap

  5. 测试 WAF 是否拒绝错误请求:

    $ curl -X POST "http://${INGRESS}" \
      -F "user='<script><alert>Hello></alert></script>'"
    Copy to Clipboard Toggle word wrap

    输出示例

    <html>
    <head><title>403 Forbidden</title></head>
    <body>
    <center><h1>403 Forbidden</h1></center>
    </body>
    </html
    Copy to Clipboard Toggle word wrap

    注意

    激活 AWS WAF 集成有时可能需要几分钟。如果您没有收到 403 Forbidden 错误,请等待几秒钟,然后重试。

    预期的结果是一个 403 Forbidden 错误,这意味着 AWS WAF 正在保护您的应用程序。

返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

Theme

© 2025 Red Hat