Berbagi teknologi

Gerbang Awan Musim Semi

2024-07-12

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

memengaruhi

  • Manajemen terpadu, mudah dipantau
  • Keamanan, pembatasan arus: menyaring informasi ilegal di lapisan gateway
  • gerbang eksternal nginx, gerbang intranet
  • nginx dapat ditingkatkan dengan Lua atau Kong

konsep

  • id: nama sewenang-wenang
  • uri: Alamat layanan proxy. id dan uri wajib diisi, predikat dan filter bersifat opsional
  • Predikat: dapat digunakan untuk mencocokkan uri untuk mengakses gateway. Jika cocok, rute saat ini akan berlaku.
  • Filter: Sebuah instance dari GatewayFilter, menambahkan logika sebelum atau sesudah proksi, dengan fleksibilitas tertinggi

Aliran pemrosesan

  • Pertama, Pemetaan Handler memproses URL, dan kemudian menyerahkannya ke Web Handler. Ia memanggil bagian pertama dari filter untuk diproses. Setelah pemrosesan selesai, ia memanggil layanan proxy yang sebenarnya. Setelah layanan proxy merespons, ia menjalankan logika dari paruh kedua filter. Kembalikan hasilnya ke WebHandler, lalu ke HandlerMapping, dan terakhir ke klien

menggunakan

gateway:
      discovery:
        locator:
          enabled: true # 启用自动根据服务ID生成路由
          lower-case-service-id: true # 设置路由的路径为小写的服务ID
  • 1
  • 2
  • 3
  • 4
  • 5

konfigurasi yml

  • Jika elemen dalam daftar memiliki beberapa bidang, Anda memerlukan "-" dan titik dua untuk menentukan masing-masing bidang dan nilai; jika hanya ada satu bidang, Anda dapat menggunakan koma untuk memisahkannya.
  • Konfigurasi jenis objek, setiap bidang dapat dikonfigurasi melalui "-" dan titik dua
  • Jenis peta: kunci, nilai dipisahkan dengan titik dua
predicates:
  - Path=/sendOrder
  - Query=name,ma.
  - name: Query
    args:
      param: id
      regexp: d+
 #predicates是List, 它的元素是
 public class PredicateDefinition {

	@NotNull
	private String name;

	private Map<String, String> args = new LinkedHashMap<>();
  }
  等号分割转成对象的写法不是yml内置支持的
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

predikat

  • Konfigurasi predikatnya adalah Daftar, yang elemennya dapat berupa string dalam format atau objek tertentu. Metode penulisan string: dipisahkan dengan tanda sama dengan, bagian pertama adalah nama nama predikat, bagian kedua args dipisahkan dengan koma, nilai disimpan ke dalam nilai Peta, dan kunci Peta dibuat secara otomatis. Metode penulisan objek: PredicateDefinition
  • Jika ada koma dan titik dua di args itu sendiri, format string tidak dapat digunakan
  • Metode shortcutType mendefinisikan metode penguraian parameter args ke ConfigClass. DEFAULT: shortcutFieldOrder menghapus awalan shortcutFieldPrefix dan sesuai dengan nama bidang ConfigClass : Daftar yang dipisahkan koma, tetapi yang terakhir Nilainya adalah nilai Boolean, yang pada akhirnya diubah menjadi Peta 2 kunci. Nilai kunci pertama adalah Daftar di depan nilai Boolean, dan kunci kedua adalah Nilai Boolean.
  • Digunakan untuk mencocokkan permintaan untuk mengakses gateway (seperti uri, parameter kueri, header permintaan). Jika cocok, rute saat ini akan berlaku.
  • Sesuai dengan implementasi GatewayPredicate, kelas implementasi dibuat oleh pabrik. Pabrik adalah kelas implementasi RoutePredicateFactory. Spesifikasi penamaan kelas implementasi adalah: nama predikat+RoutePredicateFactory.
  • Nama predikat sesuai dengan awalan nama kelas dari kelas implementasi pabrik, dan parameter predikat args sesuai dengan ConfigClass pabrik.
  • Predikat ganda adalahDanHubungan
  • Ketika predikat tidak lolos, gateway mengembalikan 404

Jalur

  • Mencocokkan jalur, mendukung pencocokan semut, dan mengekstrak uriVariable melalui {}

Pertanyaan

  • Apakah ada nama parameter permintaan http yang sesuai? Nilainya bisa biasa.
  • nama Kueri tetap, argumen memiliki 2 nilai, param dan regexp, sesuai dengan nama dan nilai parameter kueri
  • Jika hanya namanya saja yang dikonfigurasi, artinya selama parameter permintaan ada, maka akan diteruskan.

Judul

  • HeaderRutePredikatPabrik
  • Cocokkan nama dan nilai header permintaan. Anda hanya dapat mencocokkan nama. Nilai header permintaan sebenarnya mungkin lebih dari satu. Selama ada satu kecocokan, nilai konfigurasi mendukung ekspresi reguler.

metode

  • Cocok dengan metode permintaan HTTP. Konfigurasi harus menggunakan huruf besar dan dipisahkan dengan koma.

AlamatJarakJarakJauh

  • IP klien yang sesuai dengan permintaan, tepatnya IP proxy jaringan terakhir, bisa kelipatan, dipisahkan dengan koma

Tuan rumah

  • Cocok dengan nilai bagian host di header permintaan Host (tidak termasuk port). Dapat berupa kelipatan, dipisahkan dengan koma, dan dapat dicocokkan dengan semut.
  • Gunakan AntPathMatcher untuk mencocokkan, dan pemisah jalurnya adalah "."

Kue kering

  • Cocokkan nama dan nilai cookie. Nilainya dapat dicocokkan secara berkala.

Berat

  • Digunakan untuk penyeimbangan beban rute yang berbeda. Rute dalam grup yang sama dimuat berdasarkan beratnya.
  • Anda dapat mengonfigurasi 2 nilai, dipisahkan dengan koma, yaitu pengelompokan dan bobot.
  • WeightCalculatorWebFilter: Saat dimulai, Peta dua lapisan dibuat berdasarkan konfigurasi Bobot. Lapisan pertama adalah nama grup, dan lapisan kedua adalah ID perutean. Saat permintaan datang, nomor acak 0~1 dihasilkan, dan ID perutean dipilih untuk setiap grup.
  • WeightRoutePredicateFactory: Saat memfilter predikat, memfilter berdasarkan grup dan ID rute

Saring

  • Metode penulisan konfigurasi sama dengan predikat. Metode penulisan string: dibagi dengan tanda sama dengan. Bagian pertama sesuai dengan awalan nama kelas pabrik filter GatewayFilterFactory, dan bagian kedua adalah parameter.
  • Filter digunakan untuk mengubah permintaan dan tanggapan

TambahkanHeaderPermintaan

  • Tambahkan header permintaan, yang dapat diperoleh dari backend
  • Nilai header permintaan mendukung akuisisi dinamis dari uriVariables

Awalan Strip

  • Hanya ada satu nilai integer n. Setelah membagi jalur yang diminta dengan "/", hapus awalan n

Membatasi

Lintas domain

spring.cloud.gateway.globalcors:
  cors-configurations:
    '[/**]': #跨域的uriPattern
      allowedHeaders: "*"
      allowedOrigins: "*"
      allowedMethods:
        - POST
        - OPTIONS
        - GET
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • Server menentukan apakah ini permintaan lintas domain berdasarkan apakah header permintaan Asal dan skema, host, dan port URL permintaan sama. Selama ada satu perbedaan, itu adalah permintaan lintas domain.
  • Harus ada konfigurasi lintas-domain, dan uri yang diminta cocok dengan uriPattern dari konfigurasi lintas-domain. Gateway akan menentukan apakah itu lintas-domain. Jika itu lintas-domain, itu akan mengizinkan header permintaan lintas-domain. sumber, metode permintaan, dan permintaan aktual dalam konfigurasi lintas domain. Apakah header permintaan, sumber, dan metode permintaan cocok, jika semuanya cocok, jalankan akses lintas domain, jika tidak, kembalikan 403Forbiden
  • org.springframework.web.reactive.handler.PemetaanAbstractHandler#getHandler
  • org.springframework.web.cors.reactive.DefaultCorsProcessor#proses

Secara otomatis menghasilkan rute

  • Mendukung perolehan ID layanan melalui penemuan layanan, dan secara otomatis menghasilkan konfigurasi perutean berdasarkan ID layanan.Uri konfigurasi perutean default adalah lb://serviceId, predikatnya adalah /serviceId/**, dan filternya adalah Rewritepath untuk menghapus serviceId.

penyaring global

FilterKlien Penyeimbang Beban Reaktif

  • Untuk memproses URI perutean dengan skema lb, pertama-tama dapatkan instance layanan sesuai dengan nama layanan melalui ServiceInstanceListSupplier, lalu muat saldo melalui instance ReactorLoadBalancer

FilterUrlPermintaanRuteKe

  • Lakukan 2 hal: 1. Dukung skema 2 lapis, simpan skema luar ke GATEWAY_SCHEME_PREFIX_ATTR, lalu hapus. 2. Gunakan skema bagian dalam, host, dan port untuk menggantikan URI sebenarnya yang diminta untuk mencapai penerusan.