GKE di AWS berjalan di Virtual Private Cloud (VPC) AWS. 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 node pool
- Subnet untuk load balancer Layanan Kubernetes
Halaman ini ditujukan untuk spesialis Jaringan yang ingin menginstal, mengonfigurasi, dan mendukung peralatan jaringan. Untuk mempelajari lebih lanjut peran umum dan contoh tugas yang kami referensikan dalam Google Cloud konten, lihat Peran dan tugas pengguna umum GKE Enterprise.
VPC Contoh
Ikuti langkah-langkah berikut untuk menyiapkan VPC yang diilustrasikan di bawah. Untuk kasus penggunaan produksi Anda sendiri, Anda dapat memilih rentang IP, zona ketersediaan, subnet, dan daftar kontrol akses jaringan yang berbeda yang sesuai dengan workload Anda.
Diagram berikut menunjukkan VPC contoh yang Anda buat saat mengikuti langkah-langkah ini:
Contoh ini menggunakan tiga zona ketersediaan— Zona Ketersediaan 1, Zona Ketersediaan 2, Zona Ketersediaan 3. Misalnya, untuk membuat VPC di region
us-east-1
, nilai ini dapat ditetapkan keus-east-1a
,us-east-1b
,us-east-1c
.Dalam setiap tiga zona ketersediaan, terdapat satu subnet publik dan satu subnet pribadi.
Replika bidang kontrol dan endpoint load balancer, serta node pool dibuat di subnet pribadi.
Subnet publik menyediakan akses internet keluar untuk subnet pribadi dan endpoint load balancer publik.
Semua subnet ini ditandai untuk penemuan otomatis subnet. Load balancer internal akan disediakan di subnet pribadi, dan load balancer yang menghadap internet di subnet publik.
Buat VPC Anda
Pilih awalan dan edit variabel halaman AMC_PREFIX dalam perintah di bawah untuk menyetelnya ke awalan yang telah Anda pilih. Contoh perintah di bawah akan otomatis melampirkan awalan ini ke semua referensi ke VPC dan sumber dayanya.
Buat Virtual Private Cloud (VPC) AWS:
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 VPCAMC_PREFIX
: awalan nama VPC yang telah Anda pilih untuk VPC dan 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 di 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 terbatas untuk membuat dan mengelola cluster. Contoh ini menggunakan Gateway internet untuk akses keluar.
Persyaratan subnet
Subnet harus
- Dapat me-resolve alamat DNS
- Dapat membuat koneksi TCP keluar pada 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 Anda tidak memiliki subnet untuk instance bidang kontrol, gunakan perintah berikut untuk membuatnya.
Buat 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
: Availability Zone 2AWS_ZONE_3
: Zona Ketersediaan 3
Membuat subnet publik
Buat tiga subnet publik. Alamat ini akan digunakan untuk memberikan akses internet keluar bagi 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
Buat 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.Hubungkan 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
Buat 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 IP Elastis (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}]'
Buat gateway NAT
Buat gateway NAT di setiap 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}]'
Mengaitkan 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 node pool
Setiap node pool ditempatkan dalam satu subnet. Anda dapat menempatkan beberapa node pool dalam satu subnet. Jumlah node dan node pool 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 mencakup ukuran kumpulan node
- Tidak mengaktifkan "Tetapkan IP publik secara otomatis"
Subnet pribadi yang dibuat sebelumnya memenuhi persyaratan untuk subnet bidang kontrol dan subnet node pool.
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 pada 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 pada 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