第 7 章 教程: 使用 AWS WAF 和 AWS ALB 来保护 ROSA 工作负载
AWS WAF 是一个 web 应用程序防火墙,可让您监控转发到受保护的 web 应用程序资源的 HTTP 和 HTTPS 请求。
您可以使用 AWS Application Load Balancer (ALB)将 Web 应用程序防火墙(WAF)添加到 Red Hat OpenShift Service on AWS (ROSA)工作负载中。使用外部解决方案可防止 ROSA 资源因为处理 WAF 而导致拒绝服务。
建议您使用更灵活的 CloudFront 方法,除非绝对必须使用基于 ALB 的解决方案。
7.1. 前提条件
多个可用区(AZ) ROSA (HCP 或 Classic)集群。
注意根据 AWS 文档,AWS ALB 在 AZ 之间至少需要两个 公共子网。因此,只有多个 AZ ROSA 集群可以与 ALB 一起使用。
-
您可以访问 OpenShift CLI(
oc
)。 -
您可以访问 AWS CLI (
aws
)。
7.1.1. 环境设置
准备环境变量:
$ export AWS_PAGER="" $ export CLUSTER=$(oc get infrastructure cluster -o=jsonpath="{.status.infrastructureName}") $ export REGION=$(oc get infrastructure cluster -o=jsonpath="{.status.platformStatus.aws.region}") $ export OIDC_ENDPOINT=$(oc get authentication.config.openshift.io cluster -o jsonpath='{.spec.serviceAccountIssuer}' | sed 's|^https://||') $ export AWS_ACCOUNT_ID=$(aws sts get-caller-identity --query Account --output text) $ export SCRATCH="/tmp/${CLUSTER}/alb-waf" $ mkdir -p ${SCRATCH} $ echo "Cluster: $(echo ${CLUSTER} | sed 's/-[a-z0-9]\{5\}$//'), Region: ${REGION}, OIDC Endpoint: ${OIDC_ENDPOINT}, AWS Account ID: ${AWS_ACCOUNT_ID}"
7.1.2. AWS VPC 和子网
本节只适用于部署到现有 VPC 的集群。如果您没有将集群部署到现有的 VPC 中,请跳过本节并继续以下安装部分。
将以下变量设置为您的 ROSA 部署的正确值:
$ export VPC_ID=<vpc-id> 1 $ export PUBLIC_SUBNET_IDS=(<space-separated-list-of-ids>) 2 $ export PRIVATE_SUBNET_IDS=(<space-separated-list-of-ids>) 3
- 1
- 使用集群的 VPC ID 替换,例如:
export VPC_ID=vpc-04c429b7dbc4680ba
。 - 2
- 使用空格分隔集群的专用子网 ID 列表替换,确保保留
()。
例如:export PUBLIC_SUBNET_IDS=(subnet-056fd6861ad332ba2 subnet-08ce3b4ec753fe74c subnet-071aa28228664972f)
。 - 3
- 使用空格分隔集群的专用子网 ID 列表替换,确保保留
()。
例如:export PRIVATE_SUBNET_IDS=(subnet-0b933d72a8d72c36a subnet-0817eb72070f1d3c2 subnet-0806e64159b66665a)
。
使用集群标识符向集群的 VPC 添加标签:
$ aws ec2 create-tags --resources ${VPC_ID} \ --tags Key=kubernetes.io/cluster/${CLUSTER},Value=shared --region ${REGION}
在您的公共子网中添加标签:
$ aws ec2 create-tags \ --resources ${PUBLIC_SUBNET_IDS} \ --tags Key=kubernetes.io/role/elb,Value='1' \ Key=kubernetes.io/cluster/${CLUSTER},Value=shared \ --region ${REGION}
在您的私有子网中添加标签:
$ aws ec2 create-tags \ --resources ${PRIVATE_SUBNET_IDS} \ --tags Key=kubernetes.io/role/internal-elb,Value='1' \ Key=kubernetes.io/cluster/${CLUSTER},Value=shared \ --region ${REGION}