7.3. 部署示例应用程序
为示例应用程序创建一个新项目:
$ oc new-project hello-world
部署 hello world 应用:
$ oc new-app -n hello-world --image=docker.io/openshift/hello-openshift
将预先创建的服务资源转换为 NodePort 服务类型:
$ oc -n hello-world patch service hello-openshift -p '{"spec":{"type":"NodePort"}}'
使用 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
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}"
输出示例
Hello OpenShift!
7.3.1. 配置 AWS WAF
AWS WAF 服务是一个 web 应用程序防火墙,可让您监控、保护和控制转发到受保护的 web 应用程序资源(如 ROSA)的 HTTP 和 HTTPS 请求。
创建 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
这将启用 Core (Common)和 SQL AWS Managed Rule Sets。
使用上面指定的规则创建 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)
使用 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}
等待 10 秒,以便规则传播并测试应用程序是否仍然可以正常工作:
$ curl "http://${INGRESS}"
输出示例
Hello OpenShift!
测试 WAF 是否拒绝错误请求:
$ curl -X POST "http://${INGRESS}" \ -F "user='<script><alert>Hello></alert></script>'"
输出示例
<html> <head><title>403 Forbidden</title></head> <body> <center><h1>403 Forbidden</h1></center> </body> </html
注意激活 AWS WAF 集成有时可能需要几分钟。如果您没有收到
403 Forbidden
错误,请等待几秒钟,然后重试。预期的结果是一个
403 Forbidden
错误,这意味着 AWS WAF 正在保护您的应用程序。