Konfigurasikan webhook untuk node hybrid - Amazon EKS

Bantu tingkatkan halaman ini

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

Untuk berkontribusi pada panduan pengguna ini, pilih Edit halaman ini pada GitHub tautan yang terletak di panel kanan setiap halaman.

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

Konfigurasikan webhook untuk node hybrid

Halaman ini merinci pertimbangan untuk menjalankan webhook dengan node hybrid. Webhook digunakan dalam aplikasi Kubernetes dan proyek open source, seperti Load Balancer AWS Controller dan CloudWatch Observability Agent, untuk melakukan kemampuan mutasi dan validasi saat runtime.

Jaringan pod yang dapat dirutekan

Jika Anda dapat membuat CIDR pod lokal dapat dirutekan di jaringan lokal, Anda dapat menjalankan webhook pada node hibrid. Ada beberapa teknik yang dapat Anda gunakan untuk membuat pod lokal CIDR dapat dirutekan di jaringan lokal Anda termasuk Border Gateway Protocol (BGP), rute statis, atau solusi perutean kustom lainnya. BGP adalah solusi yang direkomendasikan karena lebih skalabel dan lebih mudah dikelola daripada solusi alternatif yang memerlukan konfigurasi rute khusus atau manual. AWS mendukung kemampuan BGP Cilium dan Calico untuk pod iklan CIDRs, lihat Konfigurasikan CNI untuk node hybrid dan untuk informasi lebih lanjut. Pod jarak jauh yang dapat dirutekan CIDRs

Jaringan pod yang tidak dapat dirutekan

Jika Anda tidak dapat membuat CIDR pod lokal dapat dirutekan di jaringan lokal dan perlu menjalankan webhook, sebaiknya jalankan semua webhook di node cloud di cluster EKS yang sama dengan node hibrid Anda.

Pertimbangan untuk cluster mode campuran

Cluster mode campuran didefinisikan sebagai cluster EKS yang memiliki node hybrid dan node yang berjalan di AWS Cloud. Saat menjalankan cluster mode campuran, pertimbangkan rekomendasi berikut:

  • Jalankan VPC CNI pada node di AWS Cloud dan Cilium atau Calico pada node hybrid. Cilium dan Calico tidak didukung AWS saat berjalan di node di Cloud. AWS

  • Konfigurasikan webhook untuk berjalan di node di AWS Cloud. Lihat Konfigurasikan webhook untuk add-on cara mengonfigurasi webhook untuk AWS dan add-on komunitas.

  • Jika aplikasi Anda memerlukan pod yang berjalan di node di AWS Cloud untuk berkomunikasi langsung dengan pod yang berjalan pada node hybrid (“komunikasi timur-barat”), dan Anda menggunakan CNI VPC pada node di AWS Cloud, dan Cilium atau Calico pada node hybrid, maka CIDR pod lokal Anda harus dapat dirutekan di jaringan lokal Anda.

  • Jalankan setidaknya satu replika CoreDNS pada node AWS di Cloud dan setidaknya satu replika CoreDNS pada node hybrid.

  • Konfigurasikan Distribusi Lalu Lintas Layanan untuk menjaga lalu lintas Layanan lokal ke zona asalnya. Untuk informasi selengkapnya tentang Distribusi Lalu Lintas Layanan, lihatKonfigurasikan Distribusi Lalu Lintas Layanan.

  • Jika Anda menggunakan AWS Application Load Balancers (ALB) atau Network Load Balancers (NLB) untuk lalu lintas beban kerja yang berjalan pada node hybrid, maka target IP yang digunakan dengan ALB atau NLB harus dapat dirutekan dari. AWS

  • Add-on Metrics Server memerlukan konektivitas dari bidang kontrol EKS ke alamat IP pod Metrics Server. Jika Anda menjalankan add-on Metrics Server pada node hibrid, maka CIDR pod lokal Anda harus dapat dirutekan di jaringan lokal Anda.

  • Untuk mengumpulkan metrik node hibrid menggunakan Amazon Managed Service untuk kolektor terkelola Prometheus (AMP), CIDR pod lokal Anda harus dapat dirutekan di jaringan lokal. Atau, Anda dapat menggunakan kolektor terkelola AMP untuk metrik dan sumber daya bidang kontrol EKS yang berjalan di AWS Cloud, dan add-on AWS Distro for OpenTelemetry (ADOT) untuk mengumpulkan metrik untuk node hibrid.

Konfigurasikan cluster mode campuran

Untuk melihat webhook yang bermutasi dan memvalidasi yang berjalan di klaster, Anda dapat melihat jenis sumber daya Ekstensi di panel Resources konsol EKS untuk klaster Anda, atau Anda dapat menggunakan perintah berikut. EKS juga melaporkan metrik webhook di dasbor observabilitas cluster, lihat Pantau klaster Anda dengan dasbor observabilitas untuk informasi lebih lanjut.

kubectl get mutatingwebhookconfigurations
kubectl get validatingwebhookconfigurations

Konfigurasikan Distribusi Lalu Lintas Layanan

Saat menjalankan cluster mode campuran, kami menyarankan Anda menggunakan Distribusi Lalu Lintas Layanan untuk menjaga lalu lintas Layanan lokal ke zona asalnya. Service Traffic Distribution (tersedia untuk Kubernetes versi 1.31 dan yang lebih baru di EKS) adalah solusi yang direkomendasikan melalui Topology Aware Routing karena lebih mudah diprediksi. Dengan Distribusi Lalu Lintas Layanan, titik akhir yang sehat di zona tersebut akan menerima semua lalu lintas untuk zona itu. Dengan Topology Aware Routing, setiap layanan harus memenuhi beberapa kondisi di zona tersebut untuk menerapkan perutean kustom, jika tidak, ia merutekan lalu lintas secara merata ke semua titik akhir.

Jika Anda menggunakan Cilium sebagai CNI Anda, Anda harus menjalankan CNI dengan enable-service-topology set untuk mengaktifkan Distribusi Lalu Lintas true Layanan. Anda dapat meneruskan konfigurasi ini dengan bendera Helm install --set loadBalancer.serviceTopology=true atau Anda dapat memperbarui instalasi yang ada dengan perintah Cilium CLI. cilium config set enable-service-topology true Agen Cilium yang berjalan pada setiap node harus dimulai ulang setelah memperbarui konfigurasi untuk instalasi yang ada.

Contoh cara mengonfigurasi Distribusi Lalu Lintas Layanan untuk Layanan CoreDNS ditampilkan di bagian berikut, dan kami menyarankan Anda mengaktifkan hal yang sama untuk semua Layanan di klaster Anda untuk menghindari lalu lintas lintas lingkungan yang tidak diinginkan.

Konfigurasikan replika CoreDNS

Saat menjalankan cluster mode campuran, sebaiknya Anda memiliki setidaknya satu replika CoreDNS pada node hybrid dan setidaknya satu replika CoreDNS pada node di Cloud. AWS

  1. Tambahkan label zona topologi untuk setiap node hibrida Anda, misalnya. topology.kubernetes.io/zone: onprem Atau, Anda dapat mengatur label pada nodeadm init fase dengan menentukan label dalam nodeadm konfigurasi Anda, lihatNode Config untuk menyesuaikan kubelet (Opsional). Catatan, node yang berjalan di AWS Cloud secara otomatis mendapatkan label zona topologi yang diterapkan padanya yang sesuai dengan zona ketersediaan (AZ) node.

    kubectl label node hybrid-node-name topology.kubernetes.io/zone=zone
  2. Tambahkan podAntiAffinity ke penerapan CoreDNS dengan kunci zona topologi. Atau, Anda dapat mengonfigurasi penerapan CoreDNS selama instalasi dengan add-on EKS.

    kubectl edit deployment coredns -n kube-system
    spec: template: spec: affinity: ... podAntiAffinity: preferredDuringSchedulingIgnoredDuringExecution: - podAffinityTerm: labelSelector: matchExpressions: - key: k8s-app operator: In values: - kube-dns topologyKey: kubernetes.io/hostname weight: 100 - podAffinityTerm: labelSelector: matchExpressions: - key: k8s-app operator: In values: - kube-dns topologyKey: topology.kubernetes.io/zone weight: 50 ...
  3. Tambahkan pengaturan ke konfigurasi kube-dns Layanan trafficDistribution: PreferClose untuk mengaktifkan Distribusi Lalu Lintas Layanan.

    kubectl patch svc kube-dns -n kube-system --type=merge -p '{ "spec": { "trafficDistribution": "PreferClose" } }'
  4. Anda dapat mengonfirmasi bahwa Distribusi Lalu Lintas Layanan diaktifkan dengan melihat irisan titik akhir untuk kube-dns Layanan. Irisan titik akhir Anda harus menunjukkan label zona topologi Anda, yang mengonfirmasi bahwa Distribusi Lalu Lintas Layanan diaktifkan. hints Jika Anda tidak melihat hints untuk setiap alamat titik akhir, maka Distribusi Lalu Lintas Layanan tidak diaktifkan.

    kubectl get endpointslice -A | grep "kube-dns"
    kubectl get endpointslice [.replaceable]`kube-dns-<id>` -n kube-system -o yaml
    addressType: IPv4 apiVersion: discovery.k8s.io/v1 endpoints: - addresses: - <your-hybrid-node-pod-ip> hints: forZones: - name: onprem nodeName: <your-hybrid-node-name> zone: onprem - addresses: - <your-cloud-node-pod-ip> hints: forZones: - name: us-west-2a nodeName: <your-cloud-node-name> zone: us-west-2a

Konfigurasikan webhook untuk add-on

Add-on berikut menggunakan webhook dan didukung untuk digunakan dengan node hybrid.

  • AWS Pengontrol Load Balancer

  • CloudWatch Agen Observabilitas

  • AWS Distro untuk OpenTelemetry (ADOT)

  • cert-manager

Lihat bagian berikut untuk mengonfigurasi webhook yang digunakan oleh add-on ini untuk berjalan di node di Cloud. AWS

AWS Pengontrol Load Balancer

Untuk menggunakan AWS Load Balancer Controller dalam pengaturan cluster mode campuran, Anda harus menjalankan controller pada node di AWS Cloud. Untuk melakukannya, tambahkan berikut ini ke konfigurasi nilai Helm Anda atau tentukan nilainya dengan menggunakan konfigurasi add-on EKS.

affinity: nodeAffinity: requiredDuringSchedulingIgnoredDuringExecution: nodeSelectorTerms: - matchExpressions: - key: eks.amazonaws.com/compute-type operator: NotIn values: - hybrid

CloudWatch Agen Observabilitas

Add-on CloudWatch Observability Agent memiliki Operator Kubernetes yang menggunakan webhook. Untuk menjalankan operator pada node di AWS Cloud dalam pengaturan cluster mode campuran, edit konfigurasi operator CloudWatch Observability Agent. Anda tidak dapat mengonfigurasi afinitas operator selama penginstalan dengan add-on Helm dan EKS (lihat masalah containers-roadmap #2431).

kubectl edit -n amazon-cloudwatch deployment amazon-cloudwatch-observability-controller-manager
spec: ... template: ... spec: affinity: nodeAffinity: requiredDuringSchedulingIgnoredDuringExecution: nodeSelectorTerms: - matchExpressions: - key: eks.amazonaws.com/compute-type operator: NotIn values: - hybrid

AWS Distro untuk OpenTelemetry (ADOT)

Add-on AWS Distro for OpenTelemetry (ADOT) memiliki Operator Kubernetes yang menggunakan webhook. Untuk menjalankan operator pada node di AWS Cloud dalam pengaturan cluster mode campuran, tambahkan berikut ini ke konfigurasi nilai Helm Anda atau tentukan nilai dengan menggunakan konfigurasi add-on EKS.

affinity: nodeAffinity: requiredDuringSchedulingIgnoredDuringExecution: nodeSelectorTerms: - matchExpressions: - key: eks.amazonaws.com/compute-type operator: NotIn values: - hybrid

Jika CIDR pod Anda tidak dapat dirutekan di jaringan lokal Anda, maka kolektor ADOT harus berjalan pada node hybrid untuk mengikis metrik dari node hibrid Anda dan beban kerja yang berjalan di dalamnya. Untuk melakukannya, edit Custom Resource Definition (CRD).

kubectl -n opentelemetry-operator-system edit opentelemetrycollectors.opentelemetry.io adot-col-prom-metrics
spec: affinity: nodeAffinity: requiredDuringSchedulingIgnoredDuringExecution: nodeSelectorTerms: - matchExpressions: - key: eks.amazonaws.com/compute-type operator: In values: - hybrid

Anda dapat mengonfigurasi kolektor ADOT untuk hanya mengikis metrik dari node hibrida dan sumber daya yang berjalan pada node hibrida dengan menambahkan yang berikut relabel_configs ke masing-masing scrape_configs dalam konfigurasi CRD kolektor ADOT.

relabel_configs: - action: keep regex: hybrid source_labels: - __meta_kubernetes_node_label_eks_amazonaws_com_compute_type

Add-on ADOT memiliki persyaratan prasyarat cert-manager untuk menginstal sertifikat TLS yang digunakan oleh webhook operator ADOT. cert-managerjuga menjalankan webhooks dan Anda dapat mengonfigurasinya untuk berjalan di node di AWS Cloud dengan konfigurasi nilai Helm berikut.

affinity: nodeAffinity: requiredDuringSchedulingIgnoredDuringExecution: nodeSelectorTerms: - matchExpressions: - key: eks.amazonaws.com/compute-type operator: NotIn values: - hybrid webhook: affinity: nodeAffinity: requiredDuringSchedulingIgnoredDuringExecution: nodeSelectorTerms: - matchExpressions: - key: eks.amazonaws.com/compute-type operator: NotIn values: - hybrid cainjector: affinity: nodeAffinity: requiredDuringSchedulingIgnoredDuringExecution: nodeSelectorTerms: - matchExpressions: - key: eks.amazonaws.com/compute-type operator: NotIn values: - hybrid startupapicheck: affinity: nodeAffinity: requiredDuringSchedulingIgnoredDuringExecution: nodeSelectorTerms: - matchExpressions: - key: eks.amazonaws.com/compute-type operator: NotIn values: - hybrid

cert-manager

cert-managerAdd-on menjalankan webhooks dan Anda dapat mengonfigurasinya untuk berjalan di node di AWS Cloud dengan konfigurasi nilai Helm berikut.

affinity: nodeAffinity: requiredDuringSchedulingIgnoredDuringExecution: nodeSelectorTerms: - matchExpressions: - key: eks.amazonaws.com/compute-type operator: NotIn values: - hybrid webhook: affinity: nodeAffinity: requiredDuringSchedulingIgnoredDuringExecution: nodeSelectorTerms: - matchExpressions: - key: eks.amazonaws.com/compute-type operator: NotIn values: - hybrid cainjector: affinity: nodeAffinity: requiredDuringSchedulingIgnoredDuringExecution: nodeSelectorTerms: - matchExpressions: - key: eks.amazonaws.com/compute-type operator: NotIn values: - hybrid startupapicheck: affinity: nodeAffinity: requiredDuringSchedulingIgnoredDuringExecution: nodeSelectorTerms: - matchExpressions: - key: eks.amazonaws.com/compute-type operator: NotIn values: - hybrid