Komputer riba bersambung ke titik akhir Client VPN, dan terraform apply masih gagal pada sumber laluan. Konfigurasi biasanya mempunyai lebih banyak CIDR destinasi daripada subnet berkaitan, dan blok laluan memilih sasaran dengan indeks. Itu menganggap kedua-dua koleksi selari. Ia tidak, dan kegagalan muncul semasa penggunaan dan bukan semasa semakan.

Namakan objek yang gagal

Tiga sumber terlibat dan setiap satu menjawab soalan berbeza. Persatuan meletakkan antara muka rangkaian titik akhir dalam subnet. Laluan menyatakan awalan destinasi mana yang dihantar ke subnet sasaran. Peraturan kebenaran menyatakan pengguna mana boleh mencapai awalan mana. Laluan yang menghala ke subnet yang tidak pernah dikaitkan gagal walaupun kedua-dua objek wujud, kerana sasaran mesti tergolong dalam titik akhir ini.

Senaraikan persatuan terlebih dahulu: aws ec2 describe-client-vpn-target-networks --client-vpn-endpoint-id cvpn-endpoint-0123456789abcdef0.

Ingat laluan tempatan VPC

Persatuan pertama menambah laluan tempatan untuk seluruh VPC, jadi setiap subnet dalam VPC itu sudah boleh dicapai tanpa sumber laluan. Laluan tambahan wujud untuk VPC rakan sebaya, sambungan Transit Gateway dan awalan on-premises yang tidak dimiliki VPC. Sebab itulah titik akhir dengan tiga persatuan boleh membawa tujuh entri destinasi secara sah.

Kira destinasi yang berada di luar VPC sebelum menambah laluan. Jika kiraan itu lebih kecil daripada senarai CIDR, senarai itu menerangkan subnet yang tidak memerlukan laluan sama sekali.

Gantikan indeks dengan peta

Membalut indeks dalam pengendali modulo menyenyapkan ralat dan mengekalkan kesilapan pemodelan. Destinasi yang tidak dapat dicapai melalui sasaran yang dipilih masih tidak membawa trafik, sesuci mana pun pelan digunakan. Simpan hubungan itu sebaliknya, dan biarkan Terraform menyemaknya sebelum apa-apa dicipta. Blok di bawah adalah ilustrasi dan menggunakan argumen laluan titik akhir penyedia.

variable "client_vpn_destinations" {
  description = "Destination CIDR mapped to an associated subnet key"
  type        = map(string)
}

resource "aws_ec2_client_vpn_route" "this" {
  for_each               = var.client_vpn_destinations
  client_vpn_endpoint_id = aws_ec2_client_vpn_endpoint.this.id
  destination_cidr_block = each.key
  target_vpc_subnet_id   = aws_subnet.private[each.value].id

  lifecycle {
    precondition {
      condition     = contains(keys(aws_subnet.private), each.value)
      error_message = "Route target must be a subnet key in the associated map."
    }
  }
}

Apabila peta berada di sebelah senarai persatuan, menambah destinasi memaksa keputusan tentang subnet mana yang membawanya. Itulah perbualan yang disembunyikan oleh indeks.

Kegagalan lain menghasilkan nilai tidak bermakna dan bukan ralat indeks. Menghantar binaan tahap rendah di tempat antara muka tahap lebih tinggi dijangka membiarkan medan yang dibaca API tidak terisi, dan CIDR yang terhasil tidak boleh digunakan. Terraform menunjukkan bentuk yang sama apabila rentetan tiba di tempat objek dijangka. Semak skema penyedia untuk jenis argumen.

Buktikan dari klien

Jalankan terraform validate dan pelan terhadap keadaan sebenar sebelum menggunakan. Selepas itu, bandingkan senarai rangkaian sasaran titik akhir dengan peta dan bukan mempercayai apply yang berjaya.

Ujian penerimaan ialah klien bersambung yang mencapai setiap awalan yang dimaksudkan.

Peraturan kebenaran ialah tempat banyak persediaan berhenti awal. Ia terhad kepada CIDR destinasi dan kumpulan, dan laluan tanpa kebenaran yang sepadan menghasilkan klien bersambung yang tidak dapat mencapai awalan itu. Semak kedua-dua objek untuk setiap awalan, kerana apply yang mencipta laluan dan terlupa peraturan kelihatan lengkap. Uji dengan seorang pengguna dalam kumpulan dan seorang di luarnya.

Apabila satu awalan gagal, bandingkan entri laluannya dengan peraturan kebenaran. Kebenaran yang hilang dan laluan yang hilang kelihatan serupa dalam log klien dan diperbaiki dalam sumber berbeza.

Artikel berkaitan