我有一个脚本,用于设置带有其他有用服务的 EKS 集群。其中之一是安装 RDS 控制器套件 (ACK) 来启动 Aurora 数据库。但是,有时当我运行此脚本时,dbcluster 自定义资源会遇到一个问题,即只有一个子网位于它被告知要使用的子网组中。
我正在按照 AWS 网站上的说明安装 RDS ECK helm 图表。
echo "Setting up RDS controller"
EKS_VPC_ID=$(aws eks describe-cluster --name "${CLUSTER_NAME}" --query "cluster.resourcesVpcConfig.vpcId" --output text)
RDS_SUBNET_GROUP_NAME="sng-${CLUSTER_NAME}"
RDS_SUBNET_GROUP_DESCRIPTION="RDS subnet group for EKS ${CLUSTER_NAME}"
EKS_SUBNET_IDS=$(aws ec2 describe-subnets --filter "Name=vpc-id,Values=${EKS_VPC_ID}" --query 'Subnets[?MapPublicIpOnLaunch==`false`].SubnetId' --output text)
RDS_NAMESPACE="${ACK_K8S_NAMESPACE}"
RDS_SNG_FILE="/tmp/$(date +%Y%m%d%H%M%S)-${RDS_NAMESPACE}-$$.yaml"
cat > "$RDS_SNG_FILE" << EOF
apiVersion: rds.services.k8s.aws/v1alpha1
kind: DBSubnetGroup
metadata:
name: ${RDS_SUBNET_GROUP_NAME}
namespace: ${RDS_NAMESPACE}
spec:
name: ${RDS_SUBNET_GROUP_NAME}
description: ${RDS_SUBNET_GROUP_DESCRIPTION}
subnetIDs:
$(printf " - %s\n" ${EKS_SUBNET_IDS})
tags: []
EOF
有时,EKS_SUBNET_IDS 仅显示一个子网。但是,再次运行aws ec2 describe-subnets --filter "Name=vpc-id,Values=${EKS_VPC_ID}" --query 'Subnets[?MapPublicIpOnLaunch==
false].SubnetId' --output text
通常会显示两个子网。
这可能是什么原因造成的?我很确定这两个子网已经在 VPC 中,因为集群已经使用两个 AZ 子网创建...
在调试这个问题时,查看dbsubnetgroup
kubernetes 中的 CRD,我遇到了一个有趣的资源:
arn: arn:aws:rds:us-west-2:654654xxxxxx:subgrp:sng-jwatte-cluster
当我在 AWS CLI 中列出此内容时,我还看到两个子网:
{
"DBSubnetGroupName": "sng-jwatte-cluster",
"DBSubnetGroupDescription": "RDS subnet group for EKS jwatte-cluster",
"VpcId": "vpc-09c2f1542e2xxxxxx",
"SubnetGroupStatus": "Complete",
"Subnets": [
{
"SubnetIdentifier": "subnet-00591d77694xxxxxx",
"SubnetAvailabilityZone": {
"Name": "us-west-2c"
},
"SubnetOutpost": {},
"SubnetStatus": "Active"
},
{
"SubnetIdentifier": "subnet-0b7fdeaece9xxxxxx",
"SubnetAvailabilityZone": {
"Name": "us-west-2d"
},
"SubnetOutpost": {},
"SubnetStatus": "Active"
}
],
"DBSubnetGroupArn": "arn:aws:rds:us-west-2:654654xxxxxx:subgrp:sng-jwatte-cluster",
"SupportedNetworkTypes": []
}