Membuat VPC AWS

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 VPC

  • 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 ke us-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

  1. 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.

  2. 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 di
    • AMC_PREFIX: Awalan nama VPC yang dipilih untuk VPC Anda beserta resource-nya
  3. 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:

Membuat subnet publik

  1. 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
  2. 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

  1. 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.

  2. 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

  1. 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}]'
    
  2. 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
    
  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
    
  4. 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

  1. 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}]'
    
  2. 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
    
  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

Langkah selanjutnya

Buat kunci AWS KMS.