GKE di AWS berjalan di AWS Virtual Private Cloud (VPC). Halaman ini menjelaskan cara menyiapkan VPC baru untuk cluster Anda.
GKE di AWS membuat dan mengelola resource dalam VPC yang Anda tentukan. Anda juga harus membuat beberapa subnet di dalam VPC:
- Hingga tiga subnet untuk node bidang kontrol
- Subnet untuk kumpulan node
- Subnet untuk load balancer Layanan Kubernetes
Contoh VPC
Ikuti langkah-langkah berikut untuk menyiapkan VPC yang diilustrasikan di bawah. Untuk kasus penggunaan produksi sendiri, Anda dapat memilih berbagai rentang IP, zona ketersediaan, subnet, dan daftar kontrol akses jaringan yang sesuai dengan workload Anda.
Diagram berikut menunjukkan contoh VPC yang Anda buat saat mengikuti langkah-langkah berikut:
Contoh ini menggunakan tiga zona ketersediaan— Zona Ketersediaan 1, Zona Ketersediaan 2, Zona Ketersediaan 3. Misalnya, untuk membuat VPC di region
us-east-1
, parameter ini dapat ditetapkan keus-east-1a
,us-east-1b
,us-east-1c
.Dalam masing-masing dari tiga zona ketersediaan, ada satu subnet publik dan satu subnet pribadi.
Replika bidang kontrol dan endpoint load balancer, serta kumpulan node dibuat di subnet pribadi.
Subnet publik menyediakan akses internet keluar untuk subnet pribadi dan endpoint load balancer publik.
Semua subnet ini diberi tag untuk penemuan otomatis subnet. Load balancer internal akan disediakan di subnet pribadi, dan load balancer yang terhubung ke internet di subnet publik.
Membuat VPC Anda
Pilih awalan dan edit variabel halaman AMC_PREFIX dalam perintah di bawah untuk menetapkannya ke awalan yang Anda pilih. Contoh perintah di bawah ini kemudian akan otomatis melampirkan awalan ini ke semua referensi ke VPC Anda dan resource-nya.
Membuat Virtual Private Cloud (VPC):
aws --region AWS_REGION ec2 create-vpc \ --cidr-block 10.0.0.0/16 \ --tag-specifications 'ResourceType=vpc, Tags=[{Key=Name,Value=AMC_PREFIXVPC}]'
Ganti kode berikut:
AWS_REGION
: nama region AWS yang didukung untuk membuat VPC diAMC_PREFIX
: Awalan nama VPC yang dipilih untuk VPC Anda beserta resource-nya
Simpan ID VPC Anda ke variabel lingkungan dan aktifkan dukungan DNS yang disediakan AWS untuk VPC:
VPC_ID=$(aws ec2 describe-vpcs \ --filters 'Name=tag:Name,Values=AMC_PREFIXVPC' \ --query "Vpcs[].VpcId" --output text) aws ec2 modify-vpc-attribute --enable-dns-hostnames --vpc-id $VPC_ID aws ec2 modify-vpc-attribute --enable-dns-support --vpc-id $VPC_ID
Anda juga dapat menggunakan setelan DNS yang berbeda untuk VPC Anda. Untuk mengetahui informasi selengkapnya, lihat DNS VPC AWS.
Subnet bidang kontrol
Anda dapat mengonfigurasi hingga tiga subnet untuk replika bidang kontrol. Jika Anda menentukan kurang dari tiga subnet, GKE di AWS akan membuat tiga replika bidang kontrol dan mendistribusikannya ke seluruh subnet yang ditentukan.
Cluster bersifat pribadi untuk VPC Anda. Akses masuk langsung ke cluster dari internet tidak diizinkan. GKE di AWS memerlukan akses internet keluar yang terbatas untuk membuat dan mengelola cluster. Contoh ini menggunakan {i>Gateway <i}internet untuk akses keluar.
Persyaratan subnet
Subnet harus
- Dapat me-resolve alamat DNS
- Dapat membuat koneksi TCP keluar di port 443 ke alamat IP yang dapat dirutekan
- Dapat terhubung ke endpoint berikut:
Endpoint | Tujuan |
---|---|
storage.googleapis.com | Untuk mendownload dari Cloud Storage selama penginstalan |
*.gcr.io | Untuk mendownload dari Container Registry selama penginstalan |
gkeconnect.googleapis.com | Untuk terhubung ke layanan pengelolaan |
oauth2.googleapis.com | Untuk autentikasi cluster |
sts.googleapis.com | Untuk autentikasi cluster |
logging.googleapis.com | Untuk mengirim log ke Cloud Logging |
monitoring.googleapis.com | Untuk mengirim metrik ke Cloud Monitoring |
opsconfigmonitoring.googleapis.com` | Untuk mengirim metadata resource ke Cloud Monitoring |
servicecontrol.googleapis.com | Untuk Cloud Audit Logging |
Jika tidak memiliki subnet untuk instance bidang kontrol, gunakan perintah berikut untuk membuatnya.
Membuat subnet pribadi
Buat tiga subnet pribadi di zona ketersediaan yang sesuai:
aws ec2 create-subnet \
--availability-zone AWS_ZONE_1 \
--vpc-id $VPC_ID \
--cidr-block 10.0.1.0/24 \
--tag-specifications 'ResourceType=subnet, Tags=[{Key=Name,Value=AMC_PREFIXPrivateSubnet1}]'
aws ec2 create-subnet \
--availability-zone AWS_ZONE_2 \
--vpc-id $VPC_ID \
--cidr-block 10.0.2.0/24 \
--tag-specifications 'ResourceType=subnet, Tags=[{Key=Name,Value=AMC_PREFIXPrivateSubnet2}]'
aws ec2 create-subnet \
--availability-zone AWS_ZONE_3 \
--vpc-id $VPC_ID \
--cidr-block 10.0.3.0/24 \
--tag-specifications 'ResourceType=subnet, Tags=[{Key=Name,Value=AMC_PREFIXPrivateSubnet3}]'
Ganti kode berikut:
AWS_ZONE_1
: Zona Ketersediaan 1AWS_ZONE_2
: Zona Ketersediaan 2AWS_ZONE_3
: Zona Ketersediaan 3
Membuat subnet publik
Membuat tiga subnet publik. Ini akan digunakan untuk menyediakan akses internet keluar untuk subnet pribadi.
aws ec2 create-subnet \ --availability-zone AWS_ZONE_1 \ --vpc-id $VPC_ID \ --cidr-block 10.0.101.0/24 \ --tag-specifications 'ResourceType=subnet, Tags=[{Key=Name,Value=AMC_PREFIXPublicSubnet1}]' aws ec2 create-subnet \ --availability-zone AWS_ZONE_2 \ --vpc-id $VPC_ID \ --cidr-block 10.0.102.0/24 \ --tag-specifications 'ResourceType=subnet, Tags=[{Key=Name,Value=AMC_PREFIXPublicSubnet2}]' aws ec2 create-subnet \ --availability-zone AWS_ZONE_3 \ --vpc-id $VPC_ID \ --cidr-block 10.0.103.0/24 \ --tag-specifications 'ResourceType=subnet, Tags=[{Key=Name,Value=AMC_PREFIXPublicSubnet3}]'
Ganti kode berikut:
AWS_ZONE_1
AWS_ZONE_2
AWS_ZONE_3
Tandai subnet sebagai publik:
PUBLIC_SUBNET_ID_1=$(aws ec2 describe-subnets \ --filters 'Name=tag:Name,Values=AMC_PREFIXPublicSubnet1' \ --query "Subnets[].SubnetId" --output text) PUBLIC_SUBNET_ID_2=$(aws ec2 describe-subnets \ --filters 'Name=tag:Name,Values=AMC_PREFIXPublicSubnet2' \ --query "Subnets[].SubnetId" --output text) PUBLIC_SUBNET_ID_3=$(aws ec2 describe-subnets \ --filters 'Name=tag:Name,Values=AMC_PREFIXPublicSubnet3' \ --query "Subnets[].SubnetId" --output text) aws ec2 modify-subnet-attribute \ --map-public-ip-on-launch \ --subnet-id $PUBLIC_SUBNET_ID_1 aws ec2 modify-subnet-attribute \ --map-public-ip-on-launch \ --subnet-id $PUBLIC_SUBNET_ID_2 aws ec2 modify-subnet-attribute \ --map-public-ip-on-launch \ --subnet-id $PUBLIC_SUBNET_ID_3
Membuat gateway internet
Buat gateway internet agar subnet publik memiliki akses ke internet:
aws --region AWS_REGION ec2 create-internet-gateway \ --tag-specifications 'ResourceType=internet-gateway, Tags=[{Key=Name,Value=AMC_PREFIXInternetGateway}]'
Ganti
AWS_REGION
: nama region AWS tempat VPC Anda dibuat.Pasang gateway internet ke VPC Anda:
INTERNET_GW_ID=$(aws ec2 describe-internet-gateways \ --filters 'Name=tag:Name,Values=AMC_PREFIXInternetGateway' \ --query "InternetGateways[].InternetGatewayId" --output text) aws ec2 attach-internet-gateway \ --internet-gateway-id $INTERNET_GW_ID \ --vpc-id $VPC_ID
Mengonfigurasi tabel perutean untuk subnet publik
Membuat tabel rute untuk setiap subnet publik.
aws ec2 create-route-table --vpc-id $VPC_ID \ --tag-specifications 'ResourceType=route-table, Tags=[{Key=Name,Value=AMC_PREFIXPublicRouteTbl1}]' aws ec2 create-route-table --vpc-id $VPC_ID \ --tag-specifications 'ResourceType=route-table, Tags=[{Key=Name,Value=AMC_PREFIXPublicRouteTbl2}]' aws ec2 create-route-table --vpc-id $VPC_ID \ --tag-specifications 'ResourceType=route-table, Tags=[{Key=Name,Value=AMC_PREFIXPublicRouteTbl3}]'
Kaitkan tabel rute publik dengan subnet publik:
PUBLIC_ROUTE_TABLE_ID_1=$(aws ec2 describe-route-tables \ --filters 'Name=tag:Name,Values=AMC_PREFIXPublicRouteTbl1' \ --query "RouteTables[].RouteTableId" --output text) PUBLIC_ROUTE_TABLE_ID_2=$(aws ec2 describe-route-tables \ --filters 'Name=tag:Name,Values=AMC_PREFIXPublicRouteTbl2' \ --query "RouteTables[].RouteTableId" --output text) PUBLIC_ROUTE_TABLE_ID_3=$(aws ec2 describe-route-tables \ --filters 'Name=tag:Name,Values=AMC_PREFIXPublicRouteTbl3' \ --query "RouteTables[].RouteTableId" --output text) aws ec2 associate-route-table \ --route-table-id $PUBLIC_ROUTE_TABLE_ID_1 \ --subnet-id $PUBLIC_SUBNET_ID_1 aws ec2 associate-route-table \ --route-table-id $PUBLIC_ROUTE_TABLE_ID_2 \ --subnet-id $PUBLIC_SUBNET_ID_2 aws ec2 associate-route-table \ --route-table-id $PUBLIC_ROUTE_TABLE_ID_3 \ --subnet-id $PUBLIC_SUBNET_ID_3
Buat rute default ke gateway internet:
aws ec2 create-route --route-table-id $PUBLIC_ROUTE_TABLE_ID_1 \ --destination-cidr-block 0.0.0.0/0 --gateway-id $INTERNET_GW_ID aws ec2 create-route --route-table-id $PUBLIC_ROUTE_TABLE_ID_2 \ --destination-cidr-block 0.0.0.0/0 --gateway-id $INTERNET_GW_ID aws ec2 create-route --route-table-id $PUBLIC_ROUTE_TABLE_ID_3 \ --destination-cidr-block 0.0.0.0/0 --gateway-id $INTERNET_GW_ID
Alokasikan alamat Elastic IP (EIP) untuk setiap gateway NAT:
aws ec2 allocate-address \ --tag-specifications 'ResourceType=elastic-ip, Tags=[{Key=Name,Value=AMC_PREFIXNatEip1}]' aws ec2 allocate-address \ --tag-specifications 'ResourceType=elastic-ip, Tags=[{Key=Name,Value=AMC_PREFIXNatEip2}]' aws ec2 allocate-address \ --tag-specifications 'ResourceType=elastic-ip, Tags=[{Key=Name,Value=AMC_PREFIXNatEip3}]'
Membuat gateway NAT
Buat gateway NAT di masing-masing dari tiga subnet publik:
NAT_EIP_ALLOCATION_ID_1=$(aws ec2 describe-addresses \
--filters 'Name=tag:Name,Values=AMC_PREFIXNatEip1' \
--query "Addresses[].AllocationId" --output text)
NAT_EIP_ALLOCATION_ID_2=$(aws ec2 describe-addresses \
--filters 'Name=tag:Name,Values=AMC_PREFIXNatEip2' \
--query "Addresses[].AllocationId" --output text)
NAT_EIP_ALLOCATION_ID_3=$(aws ec2 describe-addresses \
--filters 'Name=tag:Name,Values=AMC_PREFIXNatEip3' \
--query "Addresses[].AllocationId" --output text)
aws ec2 create-nat-gateway \
--allocation-id $NAT_EIP_ALLOCATION_ID_1 \
--subnet-id $PUBLIC_SUBNET_ID_1 \
--tag-specifications 'ResourceType=natgateway, Tags=[{Key=Name,Value=AMC_PREFIXNatGateway1}]'
aws ec2 create-nat-gateway \
--allocation-id $NAT_EIP_ALLOCATION_ID_2 \
--subnet-id $PUBLIC_SUBNET_ID_2 \
--tag-specifications 'ResourceType=natgateway, Tags=[{Key=Name,Value=AMC_PREFIXNatGateway2}]'
aws ec2 create-nat-gateway \
--allocation-id $NAT_EIP_ALLOCATION_ID_3 \
--subnet-id $PUBLIC_SUBNET_ID_3 \
--tag-specifications 'ResourceType=natgateway, Tags=[{Key=Name,Value=AMC_PREFIXNatGateway3}]'
Mengonfigurasi tabel perutean untuk subnet pribadi
Buat tabel rute untuk setiap subnet pribadi:
aws ec2 create-route-table --vpc-id $VPC_ID \ --tag-specifications 'ResourceType=route-table, Tags=[{Key=Name,Value=AMC_PREFIXPrivateRouteTbl1}]' aws ec2 create-route-table --vpc-id $VPC_ID \ --tag-specifications 'ResourceType=route-table, Tags=[{Key=Name,Value=AMC_PREFIXPrivateRouteTbl2}]' aws ec2 create-route-table --vpc-id $VPC_ID \ --tag-specifications 'ResourceType=route-table, Tags=[{Key=Name,Value=AMC_PREFIXPrivateRouteTbl3}]'
Kaitkan tabel rute pribadi dengan subnet pribadi:
PRIVATE_SUBNET_ID_1=$(aws ec2 describe-subnets \ --filters 'Name=tag:Name,Values=AMC_PREFIXPrivateSubnet1' \ --query "Subnets[].SubnetId" --output text) PRIVATE_SUBNET_ID_2=$(aws ec2 describe-subnets \ --filters 'Name=tag:Name,Values=AMC_PREFIXPrivateSubnet2' \ --query "Subnets[].SubnetId" --output text) PRIVATE_SUBNET_ID_3=$(aws ec2 describe-subnets \ --filters 'Name=tag:Name,Values=AMC_PREFIXPrivateSubnet3' \ --query "Subnets[].SubnetId" --output text) PRIVATE_ROUTE_TABLE_ID_1=$(aws ec2 describe-route-tables \ --filters 'Name=tag:Name,Values=AMC_PREFIXPrivateRouteTbl1' \ --query "RouteTables[].RouteTableId" --output text) PRIVATE_ROUTE_TABLE_ID_2=$(aws ec2 describe-route-tables \ --filters 'Name=tag:Name,Values=AMC_PREFIXPrivateRouteTbl2' \ --query "RouteTables[].RouteTableId" --output text) PRIVATE_ROUTE_TABLE_ID_3=$(aws ec2 describe-route-tables \ --filters 'Name=tag:Name,Values=AMC_PREFIXPrivateRouteTbl3' \ --query "RouteTables[].RouteTableId" --output text) aws ec2 associate-route-table --route-table-id $PRIVATE_ROUTE_TABLE_ID_1 \ --subnet-id $PRIVATE_SUBNET_ID_1 aws ec2 associate-route-table --route-table-id $PRIVATE_ROUTE_TABLE_ID_2 \ --subnet-id $PRIVATE_SUBNET_ID_2 aws ec2 associate-route-table --route-table-id $PRIVATE_ROUTE_TABLE_ID_3 \ --subnet-id $PRIVATE_SUBNET_ID_3
Buat rute default ke gateway NAT:
NAT_GW_ID_1=$(aws ec2 describe-nat-gateways \ --filter 'Name=tag:Name,Values=AMC_PREFIXNatGateway1' \ --query "NatGateways[].NatGatewayId" --output text) NAT_GW_ID_2=$(aws ec2 describe-nat-gateways \ --filter 'Name=tag:Name,Values=AMC_PREFIXNatGateway2' \ --query "NatGateways[].NatGatewayId" --output text) NAT_GW_ID_3=$(aws ec2 describe-nat-gateways \ --filter 'Name=tag:Name,Values=AMC_PREFIXNatGateway3' \ --query "NatGateways[].NatGatewayId" --output text) aws ec2 create-route --route-table-id $PRIVATE_ROUTE_TABLE_ID_1 \ --destination-cidr-block 0.0.0.0/0 --gateway-id $NAT_GW_ID_1 aws ec2 create-route --route-table-id $PRIVATE_ROUTE_TABLE_ID_2 \ --destination-cidr-block 0.0.0.0/0 --gateway-id $NAT_GW_ID_2 aws ec2 create-route --route-table-id $PRIVATE_ROUTE_TABLE_ID_3 \ --destination-cidr-block 0.0.0.0/0 --gateway-id $NAT_GW_ID_3
Subnet kumpulan node
Setiap kumpulan node ditempatkan dalam satu subnet. Anda dapat menempatkan beberapa kumpulan node dalam sebuah subnet. Jumlah node dan kumpulan node yang dapat Anda buat dibatasi oleh rentang alamat IP yang tersedia di subnet.
Setiap subnet kumpulan node harus:
- Memenuhi persyaratan akses internet keluar yang sama dengan subnet bidang kontrol Anda
- Memiliki ruang alamat IP yang cukup untuk menutupi ukuran kumpulan node
- Tidak mengaktifkan "Tetapkan otomatis IP publik"
Subnet pribadi yang dibuat sebelumnya memenuhi persyaratan untuk subnet bidang kontrol dan subnet kumpulan node.
Subnet load balancer layanan
Jika Anda membuat load balancer jaringan atau load balancer HTTP, beri tag pada subnet load balancer untuk penemuan otomatis.
Beri tag subnet publik dengan kubernetes.io/role/elb
:
aws ec2 create-tags \
--resources $PUBLIC_SUBNET_ID_1 \
--tags Key=kubernetes.io/role/elb,Value=1
aws ec2 create-tags \
--resources $PUBLIC_SUBNET_ID_2 \
--tags Key=kubernetes.io/role/elb,Value=1
aws ec2 create-tags \
--resources $PUBLIC_SUBNET_ID_3 \
--tags Key=kubernetes.io/role/elb,Value=1
Beri tag subnet pribadi dengan kubernetes.io/role/internal-elb
:
aws ec2 create-tags \
--resources $PRIVATE_SUBNET_ID_1 \
--tags Key=kubernetes.io/role/internal-elb,Value=1
aws ec2 create-tags \
--resources $PRIVATE_SUBNET_ID_2 \
--tags Key=kubernetes.io/role/internal-elb,Value=1
aws ec2 create-tags \
--resources $PRIVATE_SUBNET_ID_3 \
--tags Key=kubernetes.io/role/internal-elb,Value=1