第 2 章 网络 Operator
2.1. AWS Load Balancer Operator 复制链接链接已复制到粘贴板!
AWS Load Balancer Operator 是红帽支持的 Operator,用户可以选择性地在 SRE 管理的 Red Hat OpenShift Service on AWS (ROSA)集群上安装。AWS Load Balancer Operator 管理 AWS Load Balancer Controller 的生命周期,为 ROSA 集群中运行的应用程序置备 AWS Elastic Load Balancing v2 (ELBv2)服务。
AWS Load Balancer Operator 创建的负载均衡器不能用于 OpenShift 路由,并且只应用于不需要 OpenShift Route 完整第 7 层功能的单个服务或入口资源。
AWS Load Balancer Controller 为 Red Hat OpenShift Service on AWS (ROSA)集群管理 AWS Elastic Load Balancers。当使用类型为 LoadBalancer 的 Kubernetes Service 资源实施 Kubernetes Service 资源时,控制器会在创建 Kubernetes Ingress 资源和 AWS Network Load Balancers (NLB) 时置备 AWS Application Load Balancers (ALB)。
与默认的 AWS 树内负载均衡器供应商相比,这个控制器会使用 ALBs 和 NLBs 的高级注解开发。一些高级用例有:
- 使用带有 ALB 的原生 Kubernetes Ingress 对象
- 将 ALBs 与 AWS Web 应用程序防火墙(WAF)服务集成
- 指定自定义 NLB 源 IP 范围
- 指定自定义 NLB 内部 IP 地址
AWS Load Balancer Operator 用于在 ROSA 集群中安装、管理和配置 aws-load-balancer-controller
实例。
2.1.1. 设置您的环境以安装 AWS Load Balancer Operator 复制链接链接已复制到粘贴板!
AWS Load Balancer Operator 需要具有多个可用区域(AZ)的集群,以及在同一虚拟私有云(VPC)中跨三个 AZ 分割的公共子网。
由于这些要求,AWS Load Balancer Operator 可能并不适合许多 PrivateLink 集群。AWS NLBs 没有这个限制。
在安装 AWS Load Balancer Operator 前,您必须配置以下内容:
- 具有多个可用区的 ROSA (经典架构)集群
- BYO VPC 集群
- AWS CLI
- OC CLI
2.1.1.1. AWS Load Balancer Operator 环境设置 复制链接链接已复制到粘贴板!
可选:您可以设置临时环境变量来简化安装命令。
如果您决定不使用环境变量,请手动输入代码片段中提示的值。
流程
以 admin 用户身份登录集群后,运行以下命令:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 您可以运行以下命令来验证变量是否已设置:
echo "Cluster name: ${CLUSTER_NAME}, Region: ${REGION}, OIDC Endpoint: ${OIDC_ENDPOINT}, AWS Account ID: ${AWS_ACCOUNT_ID}"
$ echo "Cluster name: ${CLUSTER_NAME}, Region: ${REGION}, OIDC Endpoint: ${OIDC_ENDPOINT}, AWS Account ID: ${AWS_ACCOUNT_ID}"
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Cluster name: <cluster_id>, Region: us-east-2, OIDC Endpoint: oidc.op1.openshiftapps.com/<oidc_id>, AWS Account ID: <aws_id>
Cluster name: <cluster_id>, Region: us-east-2, OIDC Endpoint: oidc.op1.openshiftapps.com/<oidc_id>, AWS Account ID: <aws_id>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
2.1.1.2. AWS VPC 和子网 复制链接链接已复制到粘贴板!
在安装 AWS Load Balancer Operator 之前,您必须标记 AWS VPC 资源。
流程
将环境变量设置为 ROSA 部署的正确值:
export VPC_ID=<vpc-id> export PUBLIC_SUBNET_IDS="<public-subnet-a-id> <public-subnet-b-id> <public-subnet-c-id>" export PRIVATE_SUBNET_IDS="<private-subnet-a-id> <private-subnet-b-id> <private-subnet-c-id>"
$ export VPC_ID=<vpc-id> $ export PUBLIC_SUBNET_IDS="<public-subnet-a-id> <public-subnet-b-id> <public-subnet-c-id>" $ export PRIVATE_SUBNET_IDS="<private-subnet-a-id> <private-subnet-b-id> <private-subnet-c-id>"
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用集群名称向集群的 VPC 添加标签:
aws ec2 create-tags --resources ${VPC_ID} --tags Key=kubernetes.io/cluster/${CLUSTER_NAME},Value=owned --region ${REGION}
$ aws ec2 create-tags --resources ${VPC_ID} --tags Key=kubernetes.io/cluster/${CLUSTER_NAME},Value=owned --region ${REGION}
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在您的公共子网中添加标签:
aws ec2 create-tags \ --resources ${PUBLIC_SUBNET_IDS} \ --tags Key=kubernetes.io/role/elb,Value='' \ --region ${REGION}
$ aws ec2 create-tags \ --resources ${PUBLIC_SUBNET_IDS} \ --tags Key=kubernetes.io/role/elb,Value='' \ --region ${REGION}
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在您的专用子网中添加标签:
aws ec2 create-tags \ --resources ${PRIVATE_SUBNET_IDS} \ --tags Key=kubernetes.io/role/internal-elb,Value='' \ --region ${REGION}
$ aws ec2 create-tags \ --resources ${PRIVATE_SUBNET_IDS} \ --tags Key=kubernetes.io/role/internal-elb,Value='' \ --region ${REGION}
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
- 要设置具有多个可用区的 ROSA 经典集群,请参阅 使用默认选项创建带有 STS 的 ROSA 集群
2.1.2. 安装 AWS Load Balancer Operator 复制链接链接已复制到粘贴板!
使用集群设置环境后,您可以使用 CLI 安装 AWS Load Balancer Operator。
流程
为 AWS Load Balancer Operator 在集群中创建一个新项目:
oc new-project aws-load-balancer-operator
$ oc new-project aws-load-balancer-operator
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 为 AWS Load Balancer Controller 创建 AWS IAM 策略:
注意您可以从 上游 AWS Load Balancer Controller 策略找到 AWS IAM 策略。此策略包括 Operator 正常工作所需的所有权限。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 为 AWS Load Balancer Operator 创建 AWS IAM 信任策略:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 为 AWS Load Balancer Operator 创建 AWS IAM 角色:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 为 AWS Load Balancer Operator 创建一个 secret,以假定我们新创建的 AWS IAM 角色:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 安装 AWS Load Balancer Operator:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用 Operator 部署 AWS Load Balancer Controller 实例:
注意如果在此处收到错误,等待一分钟并重试,这意味着 Operator 还没有完成安装。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 检查 Operator 和控制器 pod 是否正在运行:
oc -n aws-load-balancer-operator get pods
$ oc -n aws-load-balancer-operator get pods
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 如果没有等待时间并重试,您应该看到以下内容:
NAME READY STATUS RESTARTS AGE aws-load-balancer-controller-cluster-6ddf658785-pdp5d 1/1 Running 0 99s aws-load-balancer-operator-controller-manager-577d9ffcb9-w6zqn 2/2 Running 0 2m4s
NAME READY STATUS RESTARTS AGE aws-load-balancer-controller-cluster-6ddf658785-pdp5d 1/1 Running 0 99s aws-load-balancer-operator-controller-manager-577d9ffcb9-w6zqn 2/2 Running 0 2m4s
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
2.1.2.1. 验证部署 复制链接链接已复制到粘贴板!
创建一个新项目:
oc new-project hello-world
$ oc new-project hello-world
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 部署 hello world 应用程序:
oc new-app -n hello-world --image=docker.io/openshift/hello-openshift
$ oc new-app -n hello-world --image=docker.io/openshift/hello-openshift
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 为 AWS ALB 配置 NodePort 服务以连接:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用 AWS Load Balancer Operator 部署 AWS ALB:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 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}"
$ INGRESS=$(oc -n hello-world get ingress hello-openshift-alb \ -o jsonpath='{.status.loadBalancer.ingress[0].hostname}') $ curl "http://${INGRESS}"
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Hello OpenShift!
Hello OpenShift!
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 为您的 hello world 应用程序部署 AWS NLB:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 测试 AWS NLB 端点:
注意NLB 置备需要几分钟时间。如果您收到一个错误,显示
curl: (6) Could not resolve host
,请等待并重试。NLB=$(oc -n hello-world get service hello-openshift-nlb \ -o jsonpath='{.status.loadBalancer.ingress[0].hostname}') curl "http://${NLB}"
$ NLB=$(oc -n hello-world get service hello-openshift-nlb \ -o jsonpath='{.status.loadBalancer.ingress[0].hostname}') $ curl "http://${NLB}"
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Hello OpenShift!
Hello OpenShift!
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
2.1.3. 删除 AWS Load Balancer Operator 示例安装 复制链接链接已复制到粘贴板!
删除 hello world 应用命名空间(以及命名空间中的所有资源):
oc delete project hello-world
$ oc delete project hello-world
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 删除 AWS Load Balancer Operator 和 AWS IAM 角色:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 删除 AWS IAM 策略:
aws iam delete-policy --policy-arn $POLICY_ARN
$ aws iam delete-policy --policy-arn $POLICY_ARN
Copy to Clipboard Copied! Toggle word wrap Toggle overflow