View a markdown version of this page

Memulai dengan AWS App Mesh dan Kubernetes - AWS App Mesh

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

Memulai dengan AWS App Mesh dan Kubernetes

penting

Pemberitahuan akhir dukungan: Pada 30 September 2026, AWS akan menghentikan dukungan untuk. AWS App Mesh Setelah 30 September 2026, Anda tidak akan lagi dapat mengakses AWS App Mesh konsol atau AWS App Mesh sumber daya. Untuk informasi selengkapnya, kunjungi posting blog ini Ber migrasi dari AWS App Mesh ke Amazon ECS Service Connect.

Saat Anda mengintegrasikan AWS App Mesh dengan Kubernetes menggunakan pengontrol App Mesh untuk Kubernetes, Anda mengelola sumber daya App Mesh, seperti mesh, layanan virtual, node virtual, router virtual, dan rute melalui Kubernetes. Anda juga secara otomatis menambahkan gambar wadah sidecar App Mesh ke spesifikasi pod Kubernetes. Tutorial ini memandu Anda melalui instalasi pengontrol App Mesh untuk Kubernetes untuk mengaktifkan integrasi ini.

Pengontrol disertai dengan penyebaran definisi sumber daya kustom Kubernetes berikut:meshes,,virtual services, virtual nodes dan. virtual routers Pengontrol mengawasi pembuatan, modifikasi, dan penghapusan sumber daya khusus dan membuat perubahan pada sumber daya App Mesh Jala LayananLayanan virtual,Node virtual,Gerbang virtual,Rute gerbang,, Router virtual (termasukRute) terkait melalui App Mesh API. Untuk mempelajari lebih lanjut atau berkontribusi pada pengontrol, lihat GitHub proyek.

Pengontrol juga menginstal webhook yang menyuntikkan wadah berikut ke dalam pod Kubernetes yang diberi label dengan nama yang Anda tentukan.

  • Proksi App Mesh Envoy — Envoy menggunakan konfigurasi yang ditentukan dalam bidang kontrol App Mesh untuk menentukan ke mana harus mengirim lalu lintas aplikasi Anda.

  • Manajer rute proxy App Mesh - Memper iptables barui aturan di namespace jaringan pod yang merutekan lalu lintas masuk dan keluar melalui Envoy. Wadah ini berjalan sebagai wadah init Kubernetes di dalam pod.

Prasyarat

  • Pemahaman yang ada tentang konsep App Mesh. Untuk informasi selengkapnya, lihat Apa itu AWS App Mesh?.

  • Pemahaman yang ada tentang konsep Kubernetes. Untuk informasi selengkapnya, lihat Apa itu Kubernetes dalam dokumentasi Kubernetes.

  • Cluster Kubernetes yang ada. Jika Anda tidak memiliki cluster yang sudah ada, lihat Mem ulai dengan Amazon EKS di Panduan Pengguna Amazon EKS. Jika Anda menjalankan cluster Kubernetes Anda sendiri di Amazon EC2, pastikan Docker diautentikasi ke repositori Amazon ECR tempat gambar Envoy berada. Untuk informasi selengkapnya, lihat Gambar Utusan, O tentikasi registr i di Panduan Pengguna Amazon Elastic Container Registry, dan Menarik Gambar dari Registri Pribadi di dokumentasi Kubernetes.

  • App Mesh mendukung layanan Linux yang terdaftar dengan DNS, AWS Cloud Map, atau keduanya. Untuk menggunakan panduan memulai ini, kami sarankan Anda memiliki tiga layanan yang sudah ada yang terdaftar dengan DNS. Prosedur dalam topik ini mengasumsikan bahwa layanan yang ada diberi serviceA namaserviceB,, serviceBv2 dan bahwa semua layanan dapat ditemukan melalui namespace bernama. apps.local

    Anda dapat membuat jaring layanan dan sumber dayanya meskipun layanan tidak ada, tetapi Anda tidak dapat menggunakan mesh sampai Anda telah menerapkan layanan aktual.

  • AWS CLI Versi 1.18.116 atau yang lebih baru atau 2.0.38 atau yang lebih baru diinstal. Untuk menginstal atau memutakhirkan AWS CLI, lihat Menginstal AWS CLI.

  • kubectlKlien yang dikonfigurasi untuk berkomunikasi dengan cluster Kubernetes Anda. Jika Anda menggunakan Amazon Elastic Kubernetes Service, Anda dapat menggunakan petunjuk untuk menginstal kubectl dan mengonfigurasi file. kubeconfig

  • Helm versi 3.0 atau yang lebih baru diinstal. Jika Anda belum menginstal Helm, lihat Menggunakan Helm dengan Amazon EKS di Panduan Pengguna Amazon EKS.

  • Amazon EKS saat ini hanya mendukung IPv4_ONLY dan IPv6_ONLY hanya preferensi IP, karena Amazon EKS saat ini hanya mendukung pod yang mampu melayani hanya IPv4 lalu lintas atau hanya IPv6 lalu lintas.

Langkah-langkah yang tersisa mengasumsikan bahwa layanan aktual serviceA diberi serviceB nama,, serviceBv2 dan bahwa semua layanan dapat ditemukan melalui namespace bernama. apps.local

Langkah 1: Instal komponen integrasi

Instal komponen integrasi satu kali ke setiap cluster yang menghosting pod yang ingin Anda gunakan dengan App Mesh.

Untuk menginstal komponen integrasi
  1. Langkah-langkah yang tersisa dari prosedur ini memerlukan cluster tanpa versi pra-rilis dari pengontrol yang diinstal. Jika Anda telah menginstal versi pra-rilis, atau tidak yakin apakah sudah, Anda dapat mengunduh dan menjalankan skrip yang memeriksa untuk melihat apakah versi pra-rilis diinstal pada cluster Anda.

    curl -o pre_upgrade_check.sh https://raw.githubusercontent.com/aws/eks-charts/master/stable/appmesh-controller/upgrade/pre_upgrade_check.sh sh ./pre_upgrade_check.sh

    Jika skrip kembali Your cluster is ready for upgrade. Please proceed to the installation instructions maka Anda dapat melanjutkan ke langkah berikutnya. Jika pesan yang berbeda dikembalikan, maka Anda harus menyelesaikan langkah peningkatan sebelum melanjutkan. Untuk informasi selengkapnya tentang memutakhirkan versi pra-rilis, lihat Upgrade on GitHub.

  2. Tambahkan eks-charts repositori ke Helm.

    helm repo add eks https://aws.github.io/eks-charts
  3. Instal definisi sumber daya kustom (CRD) App Mesh Kubernetes.

    kubectl apply -k "https://github.com/aws/eks-charts/stable/appmesh-controller/crds?ref=master"
  4. Buat namespace Kubernetes untuk pengontrol.

    kubectl create ns appmesh-system
  5. Tetapkan variabel berikut untuk digunakan pada langkah selanjutnya. Ganti cluster-name dan Region-code dengan nilai untuk cluster yang ada.

    export CLUSTER_NAME=cluster-name export AWS_REGION=Region-code
  6. (Opsional) Jika Anda ingin menjalankan controller di Fargate, maka Anda perlu membuat profil Fargate. Jika Anda belum menginstal, lihat Meng eksctl instal atau Mening eksctl katkan di Panduan Pengguna Amazon EKS. Jika Anda lebih suka membuat profil menggunakan konsol, lihat Membuat profil Fargate di Panduan Pengguna Amazon EKS.

    eksctl create fargateprofile --cluster $CLUSTER_NAME --name appmesh-system --namespace appmesh-system
  7. Buat penyedia identitas OpenID Connect (OIDC) untuk cluster Anda. Jika Anda belum menginstal, Anda dapat meng eksctl instalnya dengan instruksi di Memasang atau meningkatkan eksctl di Panduan Pengguna Amazon EKS. Jika Anda lebih suka membuat penyedia menggunakan konsol, lihat Meng aktifkan peran IAM untuk akun layanan di cluster Anda di Panduan Pengguna Amazon EKS.

    eksctl utils associate-iam-oidc-provider \ --region=$AWS_REGION \ --cluster $CLUSTER_NAME \ --approve
  8. Buat peran IAM, lampirkan AWSAppMeshFullAccess dan kebijakan yang AWSCloudMapFullAccess AWS dikelola ke dalamnya, dan ikat ke akun layanan appmesh-controller Kubernetes. Peran ini memungkinkan pengontrol untuk menambah, menghapus, dan mengubah sumber daya App Mesh.

    catatan

    Perintah membuat peran AWS IAM dengan nama yang dibuat secara otomatis. Anda tidak dapat menentukan nama peran IAM yang dibuat.

    eksctl create iamserviceaccount \ --cluster $CLUSTER_NAME \ --namespace appmesh-system \ --name appmesh-controller \ --attach-policy-arn arn:aws:iam::aws:policy/AWSCloudMapFullAccess,arn:aws:iam::aws:policy/AWSAppMeshFullAccess \ --override-existing-serviceaccounts \ --approve

    Jika Anda lebih suka membuat akun layanan menggunakan Konsol Manajemen AWS atau AWS CLI, lihat Membuat peran dan kebijakan IAM untuk akun layanan Anda di Panduan Pengguna Amazon EKS. Jika Anda menggunakan Konsol Manajemen AWS atau AWS CLI untuk membuat akun, Anda juga perlu memetakan peran ke akun layanan Kubernetes. Untuk informasi selengkapnya, lihat Menentukan peran IAM untuk akun layanan Anda di Panduan Pengguna Amazon EKS.

  9. Terapkan pengontrol App Mesh. Untuk daftar semua opsi konfigurasi, lihat Konfigurasi pada GitHub.
    1. Untuk menerapkan pengontrol App Mesh untuk cluster pribadi, Anda harus mengaktifkan App Mesh dan layanan penemuan titik akhir Amazon VPC ke subnet pribadi yang ditautkan terlebih dahulu. Anda juga diminta untuk mengaturaccountId.

      --set accountId=$AWS_ACCOUNT_ID

      Untuk mengaktifkan X-Ray pelacakan di cluster pribadi, aktifkan titik X-Ray akhir Amazon ECR Amazon VPC. Pengontrol menggunakan secara public.ecr.aws/xray/aws-xray-daemon:latest default, jadi tarik gambar ini ke lokal dan dorong ke repositori ECR pribadi Anda.

      catatan

      Titik akhir Amazon VPC saat ini tidak mendukung repositori publik Amazon ECR.

      Contoh berikut menunjukkan penyebaran pengontrol dengan konfigurasi untuk X-Ray.

      helm upgrade -i appmesh-controller eks/appmesh-controller \ --namespace appmesh-system \ --set region=$AWS_REGION \ --set serviceAccount.create=false \ --set serviceAccount.name=appmesh-controller \ --set accountId=$AWS_ACCOUNT_ID \ --set log.level=debug \ --set tracing.enabled=true \ --set tracing.provider=x-ray \ --set xray.image.repository=your-account-id.dkr.ecr.your-region.amazonaws.com/your-repository \ --set xray.image.tag=your-xray-daemon-image-tag

      Verifikasi apakah X-Ray daemon berhasil disuntikkan saat mengikat penerapan aplikasi dengan simpul virtual atau gateway Anda.

      Untuk informasi selengkapnya, lihat Cluster Pribadi di Panduan Pengguna Amazon EKS.

    2. Terapkan pengontrol App Mesh untuk cluster lain. Untuk daftar semua opsi konfigurasi, lihat Konfigurasi aktif GitHub.

      helm upgrade -i appmesh-controller eks/appmesh-controller \ --namespace appmesh-system \ --set region=$AWS_REGION \ --set serviceAccount.create=false \ --set serviceAccount.name=appmesh-controller
    catatan

    Jika keluarga cluster Amazon EKS Anda adaIPv6, harap atur nama cluster saat menerapkan pengontrol App Mesh dengan menambahkan opsi berikut ke perintah --set clusterName=$CLUSTER_NAME sebelumnya.

    penting

    Jika cluster Anda berada dime-south-1,ap-east-1,ap-southeast-3,eu-south-1,il-central-1, atau Wil af-south-1 ayah, maka Anda perlu menambahkan opsi berikut ke perintah sebelumnya:

    Ganti account-id dan Region-code dengan salah satu set nilai yang sesuai.

    • Untuk gambar sidecar:
      • --set image.repository=account-id.dkr.ecr.Region-code.amazonaws.com/amazon/appmesh-controller
      • 772975370895.dkr.ecr.me-selatan-1.amazonaws. com/aws-appmesh-envoy: v1.39.1.0-prod

      • 856666278305.dkr.ecr.ap-east-1.amazonaws. com/aws-appmesh-envoy: v1.39.1.0-prod

      • 909464085924.dkr.ecr.ap-Southeast-3.amazonaws. com/aws-appmesh-envoy: v1.39.1.0-prod

      • 422531588944.dkr.ecr.eu-selatan-1.amazonaws. com/aws-appmesh-envoy: v1.39.1.0-prod

      • 564877687649.dkr.ecr.il-central-1.amazonaws. com/aws-appmesh-envoy: v1.39.1.0-prod

      • 924023996002.dkr.ecr.af-selatan-1.amazonaws. com/aws-appmesh-envoy: v1.39.1.0-prod

    • URI gambar yang lebih lama dapat ditemukan di GitHub log perubahan. AWS Akun tempat gambar hadir telah berubah dalam versiv1.5.0. Versi gambar yang lebih lama dihosting di AWS akun yang ditemukan di Amazon Elastic Kubernetes Service Amazon register gambar penampung.

    • Untuk gambar pengontrol:
      • --set sidecar.image.repository=account-id.dkr.ecr.Region-code.amazonaws.com/aws-appmesh-envoy
      • 772975370895.dkr.ecr.me-selatan-1.amazonaws. com/amazon/pengontrol appmesh-: v1.13.1

      • 856666278305.dkr.ecr.ap-east-1.amazonaws. com/amazon/pengontrol appmesh-: v1.13.1

      • 909464085924.dkr.ecr.ap-Southeast-3.amazonaws. com/amazon/pengontrol appmesh-: v1.13.1

      • 422531588944.dkr.ecr.eu-selatan-1.amazonaws. com/amazon/pengontrol appmesh-: v1.13.1

      • 564877687649.dkr.ecr.il-central-1.amazonaws. com/amazon/pengontrol appmesh-: v1.13.1

      • 924023996002.dkr.ecr.af-selatan-1.amazonaws. com/amazon/pengontrol appmesh-: v1.13.1

    • Untuk gambar init sidecar:
      • --set sidecar.image.repository=account-id.dkr.ecr.Region-code.amazonaws.com/aws-appmesh-envoy
      • 772975370895.dkr.ecr.me-selatan-1.amazonaws. com/aws-appmesh-proxy-route-manager: v7-prod

      • 856666278305.dkr.ecr.ap-east-1.amazonaws. com/aws-appmesh-proxy-route-manager: v7-prod

      • 909464085924.dkr.ecr.ap-Southeast-3.amazonaws. com/aws-appmesh-proxy-route-manager: v7-prod

      • 422531588944.dkr.ecr.eu-selatan-1.amazonaws. com/aws-appmesh-proxy-route-manager: v7-prod

      • 564877687649.dkr.ecr.il-central-1.amazonaws. com/aws-appmesh-proxy-route-manager: v7-prod

      • 924023996002.dkr.ecr.af-selatan-1.amazonaws. com/aws-appmesh-proxy-route-manager: v7-prod

    penting

    Hanya versi v1.9.0.0-prod atau yang lebih baru yang didukung untuk digunakan dengan App Mesh.

  10. Konfirmasikan bahwa versi pengontrol v1.4.0 atau lebih baru. Anda dapat meninjau log https://github.com/aws/aws-app-mesh-controller-for-k8s/releases perubahan GitHub.

    kubectl get deployment appmesh-controller \ -n appmesh-system \ -o json | jq -r ".spec.template.spec.containers[].image" | cut -f2 -d ':'
    catatan

    Jika Anda melihat log untuk wadah yang sedang berjalan, Anda mungkin melihat baris yang menyertakan teks berikut, yang dapat diabaikan dengan aman.

    Neither -kubeconfig nor -master was specified. Using the inClusterConfig. This might not work.

Langkah 2: Menyebarkan sumber daya App Mesh

Saat Anda menerapkan aplikasi di Kubernetes, Anda juga membuat sumber daya kustom Kubernetes sehingga pengontrol dapat membuat sumber daya App Mesh yang sesuai. Prosedur berikut ini membantu Anda menyebarkan sumber daya App Mesh dengan beberapa fiturnya. Anda dapat menemukan contoh manifes untuk menerapkan fitur sumber daya App Mesh lainnya di v1beta2 sub-folder dari banyak folder fitur yang tercantum di panduan App Mesh pada. GitHub

penting

Setelah pengontrol membuat sumber daya App Mesh, sebaiknya Anda hanya membuat perubahan atau menghapus sumber daya App Mesh menggunakan pengontrol. Jika Anda membuat perubahan atau menghapus sumber daya menggunakan App Mesh, pengontrol tidak akan mengubah atau membuat ulang sumber daya App Mesh yang diubah atau dihapus selama sepuluh jam, secara default. Anda dapat mengonfigurasi durasi ini menjadi lebih sedikit. Untuk informasi selengkapnya, lihat Konfigur asi aktif GitHub.

Untuk menyebarkan sumber daya App Mesh
  1. Buat namespace Kubernetes untuk menerapkan sumber daya App Mesh ke.

    1. Simpan konten berikut ini ke file bernama namespace.yaml pada komputer Anda.

      apiVersion: v1 kind: Namespace metadata: name: my-apps labels: mesh: my-mesh appmesh.k8s.aws/sidecarInjectorWebhook: enabled
    2. Buat namespace.

      kubectl apply -f namespace.yaml
  2. Buat mesh layanan App Mesh.

    1. Simpan konten berikut ini ke file bernama mesh.yaml pada komputer Anda. File ini digunakan untuk membuat sumber daya mesh bernamamy-mesh. Mesh layanan adalah batas logis untuk lalu lintas jaringan antara layanan yang berada di dalamnya.

      apiVersion: appmesh.k8s.aws/v1beta2 kind: Mesh metadata: name: my-mesh spec: namespaceSelector: matchLabels: mesh: my-mesh
    2. Buat mesh.

      kubectl apply -f mesh.yaml
    3. Lihat detail sumber daya mesh Kubernetes yang telah dibuat.

      kubectl describe mesh my-mesh

      Output

      Name: my-mesh Namespace: Labels: <none> Annotations: kubectl.kubernetes.io/last-applied-configuration: {"apiVersion":"appmesh.k8s.aws/v1beta2","kind":"Mesh","metadata":{"annotations":{},"name":"my-mesh"},"spec":{"namespaceSelector":{"matchLa... API Version: appmesh.k8s.aws/v1beta2 Kind: Mesh Metadata: Creation Timestamp: 2020-06-17T14:51:37Z Finalizers: finalizers.appmesh.k8s.aws/mesh-members finalizers.appmesh.k8s.aws/aws-appmesh-resources Generation: 1 Resource Version: 6295 Self Link: /apis/appmesh.k8s.aws/v1beta2/meshes/my-mesh UID: 111a11b1-c11d-1e1f-gh1i-j11k1l111m711 Spec: Aws Name: my-mesh Namespace Selector: Match Labels: Mesh: my-mesh Status: Conditions: Last Transition Time: 2020-06-17T14:51:37Z Status: True Type: MeshActive Mesh ARN: arn:aws:appmesh:us-west-2:111122223333:mesh/my-mesh Observed Generation: 1 Events: <none>
    4. Lihat detail tentang mesh layanan App Mesh yang dibuat pengontrol.

      aws appmesh describe-mesh --mesh-name my-mesh

      Output

      { "mesh": { "meshName": "my-mesh", "metadata": { "arn": "arn:aws:appmesh:us-west-2:111122223333:mesh/my-mesh", "createdAt": "2020-06-17T09:51:37.920000-05:00", "lastUpdatedAt": "2020-06-17T09:51:37.920000-05:00", "meshOwner": "111122223333", "resourceOwner": "111122223333", "uid": "111a11b1-c11d-1e1f-gh1i-j11k1l111m711", "version": 1 }, "spec": {}, "status": { "status": "ACTIVE" } } }
  3. Buat simpul virtual App Mesh. Node virtual bertindak sebagai penunjuk logis ke penyebaran Kubernetes.

    1. Simpan konten berikut ini ke file bernama virtual-node.yaml pada komputer Anda. File ini digunakan untuk membuat node virtual App Mesh bernama my-service-a di my-apps namespace. Node virtual mewakili layanan Kubernetes yang dibuat pada langkah selanjutnya. Nilai untuk hostname adalah nama host DNS yang sepenuhnya memenuhi syarat dari layanan aktual yang diwakili oleh node virtual ini.

      apiVersion: appmesh.k8s.aws/v1beta2 kind: VirtualNode metadata: name: my-service-a namespace: my-apps spec: podSelector: matchLabels: app: my-app-1 listeners: - portMapping: port: 80 protocol: http serviceDiscovery: dns: hostname: my-service-a.my-apps.svc.cluster.local

      Node virtual memiliki kemampuan, seperti enkripsi ujung ke ujung dan pemeriksaan kesehatan, yang tidak tercakup dalam tutorial ini. Untuk informasi selengkapnya, lihat Node virtual. Untuk melihat semua pengaturan yang tersedia untuk node virtual yang dapat Anda atur dalam spesifikasi sebelumnya, jalankan perintah berikut.

      aws appmesh create-virtual-node --generate-cli-skeleton yaml-input
    2. Terapkan simpul virtual.

      kubectl apply -f virtual-node.yaml
    3. Lihat detail sumber daya node virtual Kubernetes yang dibuat.

      kubectl describe virtualnode my-service-a -n my-apps

      Output

      Name: my-service-a Namespace: my-apps Labels: <none> Annotations: kubectl.kubernetes.io/last-applied-configuration: {"apiVersion":"appmesh.k8s.aws/v1beta2","kind":"VirtualNode","metadata":{"annotations":{},"name":"my-service-a","namespace":"my-apps"},"s... API Version: appmesh.k8s.aws/v1beta2 Kind: VirtualNode Metadata: Creation Timestamp: 2020-06-17T14:57:29Z Finalizers: finalizers.appmesh.k8s.aws/aws-appmesh-resources Generation: 2 Resource Version: 22545 Self Link: /apis/appmesh.k8s.aws/v1beta2/namespaces/my-apps/virtualnodes/my-service-a UID: 111a11b1-c11d-1e1f-gh1i-j11k1l111m711 Spec: Aws Name: my-service-a_my-apps Listeners: Port Mapping: Port: 80 Protocol: http Mesh Ref: Name: my-mesh UID: 111a11b1-c11d-1e1f-gh1i-j11k1l111m711 Pod Selector: Match Labels: App: nginx Service Discovery: Dns: Hostname: my-service-a.my-apps.svc.cluster.local Status: Conditions: Last Transition Time: 2020-06-17T14:57:29Z Status: True Type: VirtualNodeActive Observed Generation: 2 Virtual Node ARN: arn:aws:appmesh:us-west-2:111122223333:mesh/my-mesh/virtualNode/my-service-a_my-apps Events: <none>
    4. Lihat detail simpul virtual yang dibuat pengontrol di App Mesh.

      catatan

      Meskipun nama node virtual yang dibuat di Kubernetes adalahmy-service-a, nama node virtual yang dibuat di App Mesh adalah. my-service-a_my-apps Pengontrol menambahkan nama namespace Kubernetes ke nama node virtual App Mesh saat membuat sumber daya App Mesh. Nama namespace ditambahkan karena di Kubernetes Anda dapat membuat node virtual dengan nama yang sama di ruang nama yang berbeda, tetapi di App Mesh nama node virtual harus unik dalam mesh.

      aws appmesh describe-virtual-node --mesh-name my-mesh --virtual-node-name my-service-a_my-apps

      Output

      { "virtualNode": { "meshName": "my-mesh", "metadata": { "arn": "arn:aws:appmesh:us-west-2:111122223333:mesh/my-mesh/virtualNode/my-service-a_my-apps", "createdAt": "2020-06-17T09:57:29.840000-05:00", "lastUpdatedAt": "2020-06-17T09:57:29.840000-05:00", "meshOwner": "111122223333", "resourceOwner": "111122223333", "uid": "111a11b1-c11d-1e1f-gh1i-j11k1l111m711", "version": 1 }, "spec": { "backends": [], "listeners": [ { "portMapping": { "port": 80, "protocol": "http" } } ], "serviceDiscovery": { "dns": { "hostname": "my-service-a.my-apps.svc.cluster.local" } } }, "status": { "status": "ACTIVE" }, "virtualNodeName": "my-service-a_my-apps" } }
  4. Buat router virtual App Mesh. Router virtual menangani lalu lintas untuk satu atau lebih layanan virtual dalam mesh Anda.

    1. Simpan konten berikut ini ke file bernama virtual-router.yaml pada komputer Anda. File ini digunakan untuk membuat router virtual untuk merutekan lalu lintas ke node virtual bernama my-service-a yang dibuat pada langkah sebelumnya. Pengontrol membuat router virtual App Mesh dan sumber daya rute. Anda dapat menentukan lebih banyak kemampuan untuk rute Anda dan menggunakan protokol selainhttp. Untuk informasi selengkapnya, lihat Router virtual dan Rute. Perhatikan bahwa nama node virtual yang direferensikan adalah nama node virtual Kubernetes, bukan nama node virtual App Mesh yang dibuat di App Mesh oleh pengontrol.

      apiVersion: appmesh.k8s.aws/v1beta2 kind: VirtualRouter metadata: namespace: my-apps name: my-service-a-virtual-router spec: listeners: - portMapping: port: 80 protocol: http routes: - name: my-service-a-route httpRoute: match: prefix: / action: weightedTargets: - virtualNodeRef: name: my-service-a weight: 1

      (Opsional) Untuk melihat semua pengaturan yang tersedia untuk router virtual yang dapat Anda atur dalam spesifikasi sebelumnya, jalankan perintah berikut.

      aws appmesh create-virtual-router --generate-cli-skeleton yaml-input

      Untuk melihat semua pengaturan yang tersedia untuk rute yang dapat Anda tetapkan dalam spesifikasi sebelumnya, jalankan perintah berikut.

      aws appmesh create-route --generate-cli-skeleton yaml-input
    2. Terapkan router virtual.

      kubectl apply -f virtual-router.yaml
    3. Lihat sumber daya router virtual Kubernetes yang dibuat.

      kubectl describe virtualrouter my-service-a-virtual-router -n my-apps

      Output dipersingkat

      Name: my-service-a-virtual-router Namespace: my-apps Labels: <none> Annotations: kubectl.kubernetes.io/last-applied-configuration: {"apiVersion":"appmesh.k8s.aws/v1beta2","kind":"VirtualRouter","metadata":{"annotations":{},"name":"my-service-a-virtual-router","namespac... API Version: appmesh.k8s.aws/v1beta2 Kind: VirtualRouter ... Spec: Aws Name: my-service-a-virtual-router_my-apps Listeners: Port Mapping: Port: 80 Protocol: http Mesh Ref: Name: my-mesh UID: 111a11b1-c11d-1e1f-gh1i-j11k1l111m711 Routes: Http Route: Action: Weighted Targets: Virtual Node Ref: Name: my-service-a Weight: 1 Match: Prefix: / Name: my-service-a-route Status: Conditions: Last Transition Time: 2020-06-17T15:14:01Z Status: True Type: VirtualRouterActive Observed Generation: 1 Route AR Ns: My - Service - A - Route: arn:aws:appmesh:us-west-2:111122223333:mesh/my-mesh/virtualRouter/my-service-a-virtual-router_my-apps/route/my-service-a-route Virtual Router ARN: arn:aws:appmesh:us-west-2:111122223333:mesh/my-mesh/virtualRouter/my-service-a-virtual-router_my-apps Events: <none>
    4. Lihat sumber daya router virtual yang dibuat pengontrol di App Mesh. Anda menentukan my-service-a-virtual-router_my-apps untukname, karena ketika controller membuat router virtual di App Mesh, ia menambahkan nama namespace Kubernetes ke nama router virtual.

      aws appmesh describe-virtual-router --virtual-router-name my-service-a-virtual-router_my-apps --mesh-name my-mesh

      Output

      { "virtualRouter": { "meshName": "my-mesh", "metadata": { "arn": "arn:aws:appmesh:us-west-2:111122223333:mesh/my-mesh/virtualRouter/my-service-a-virtual-router_my-apps", "createdAt": "2020-06-17T10:14:01.547000-05:00", "lastUpdatedAt": "2020-06-17T10:14:01.547000-05:00", "meshOwner": "111122223333", "resourceOwner": "111122223333", "uid": "111a11b1-c11d-1e1f-gh1i-j11k1l111m711", "version": 1 }, "spec": { "listeners": [ { "portMapping": { "port": 80, "protocol": "http" } } ] }, "status": { "status": "ACTIVE" }, "virtualRouterName": "my-service-a-virtual-router_my-apps" } }
    5. Lihat sumber daya rute yang dibuat pengontrol di App Mesh. Sumber daya rute tidak dibuat di Kubernetes karena rute adalah bagian dari konfigurasi router virtual di Kubernetes. Informasi rute ditampilkan dalam detail sumber daya Kubernetes di sub-langkah. c Pengontrol tidak menambahkan nama namespace Kubernetes ke nama rute App Mesh saat membuat rute di App Mesh karena nama rute unik untuk router virtual.

      aws appmesh describe-route \ --route-name my-service-a-route \ --virtual-router-name my-service-a-virtual-router_my-apps \ --mesh-name my-mesh

      Output

      { "route": { "meshName": "my-mesh", "metadata": { "arn": "arn:aws:appmesh:us-west-2:111122223333:mesh/my-mesh/virtualRouter/my-service-a-virtual-router_my-apps/route/my-service-a-route", "createdAt": "2020-06-17T10:14:01.577000-05:00", "lastUpdatedAt": "2020-06-17T10:14:01.577000-05:00", "meshOwner": "111122223333", "resourceOwner": "111122223333", "uid": "111a11b1-c11d-1e1f-gh1i-j11k1l111m711", "version": 1 }, "routeName": "my-service-a-route", "spec": { "httpRoute": { "action": { "weightedTargets": [ { "virtualNode": "my-service-a_my-apps", "weight": 1 } ] }, "match": { "prefix": "/" } } }, "status": { "status": "ACTIVE" }, "virtualRouterName": "my-service-a-virtual-router_my-apps" } }
  5. Buat layanan virtual App Mesh. Layanan virtual adalah abstraksi dari layanan sebenarnya yang disediakan oleh simpul virtual secara langsung atau tidak langsung berdasarkan alat router virtual. Layanan dependen memanggil layanan virtual Anda dengan namanya. Meskipun namanya tidak penting untuk App Mesh, sebaiknya beri nama layanan virtual sebagai nama domain yang sepenuhnya memenuhi syarat dari layanan aktual yang diwakili oleh layanan virtual. Dengan memberi nama layanan virtual Anda dengan cara ini, Anda tidak perlu mengubah kode aplikasi Anda untuk mereferensikan nama yang berbeda. Permintaan dialihkan ke node virtual atau router virtual yang ditentukan sebagai penyedia untuk layanan virtual.

    1. Simpan konten berikut ini ke file bernama virtual-service.yaml pada komputer Anda. File ini digunakan untuk membuat layanan virtual yang menggunakan penyedia router virtual untuk merutekan lalu lintas ke node virtual bernama my-service-a yang dibuat pada langkah sebelumnya. Nilai untuk awsName dalam spec adalah nama domain yang sepenuhnya memenuhi syarat (FQDN) dari layanan Kubernetes aktual yang disabstrak oleh layanan virtual ini. Layanan Kubernetes dibuat di. Langkah 3: Buat atau perbarui layanan Untuk informasi selengkapnya, lihat Layanan virtual.

      apiVersion: appmesh.k8s.aws/v1beta2 kind: VirtualService metadata: name: my-service-a namespace: my-apps spec: awsName: my-service-a.my-apps.svc.cluster.local provider: virtualRouter: virtualRouterRef: name: my-service-a-virtual-router

      Untuk melihat semua pengaturan yang tersedia untuk layanan virtual yang dapat Anda atur dalam spesifikasi sebelumnya, jalankan perintah berikut.

      aws appmesh create-virtual-service --generate-cli-skeleton yaml-input
    2. Buat layanan virtual.

      kubectl apply -f virtual-service.yaml
    3. Lihat detail sumber daya layanan virtual Kubernetes yang dibuat.

      kubectl describe virtualservice my-service-a -n my-apps

      Output

      Name: my-service-a Namespace: my-apps Labels: <none> Annotations: kubectl.kubernetes.io/last-applied-configuration: {"apiVersion":"appmesh.k8s.aws/v1beta2","kind":"VirtualService","metadata":{"annotations":{},"name":"my-service-a","namespace":"my-apps"}... API Version: appmesh.k8s.aws/v1beta2 Kind: VirtualService Metadata: Creation Timestamp: 2020-06-17T15:48:40Z Finalizers: finalizers.appmesh.k8s.aws/aws-appmesh-resources Generation: 1 Resource Version: 13598 Self Link: /apis/appmesh.k8s.aws/v1beta2/namespaces/my-apps/virtualservices/my-service-a UID: 111a11b1-c11d-1e1f-gh1i-j11k1l111m711 Spec: Aws Name: my-service-a.my-apps.svc.cluster.local Mesh Ref: Name: my-mesh UID: 111a11b1-c11d-1e1f-gh1i-j11k1l111m711 Provider: Virtual Router: Virtual Router Ref: Name: my-service-a-virtual-router Status: Conditions: Last Transition Time: 2020-06-17T15:48:40Z Status: True Type: VirtualServiceActive Observed Generation: 1 Virtual Service ARN: arn:aws:appmesh:us-west-2:111122223333:mesh/my-mesh/virtualService/my-service-a.my-apps.svc.cluster.local Events: <none>
    4. Lihat detail sumber daya layanan virtual yang dibuat pengontrol di App Mesh. Pengontrol Kubernetes tidak menambahkan nama namespace Kubernetes ke nama layanan virtual App Mesh saat membuat layanan virtual di App Mesh karena nama layanan virtual adalah FQDN unik.

      aws appmesh describe-virtual-service --virtual-service-name my-service-a.my-apps.svc.cluster.local --mesh-name my-mesh

      Output

      { "virtualService": { "meshName": "my-mesh", "metadata": { "arn": "arn:aws:appmesh:us-west-2:111122223333:mesh/my-mesh/virtualService/my-service-a.my-apps.svc.cluster.local", "createdAt": "2020-06-17T10:48:40.182000-05:00", "lastUpdatedAt": "2020-06-17T10:48:40.182000-05:00", "meshOwner": "111122223333", "resourceOwner": "111122223333", "uid": "111a11b1-c11d-1e1f-gh1i-j11k1l111m711", "version": 1 }, "spec": { "provider": { "virtualRouter": { "virtualRouterName": "my-service-a-virtual-router_my-apps" } } }, "status": { "status": "ACTIVE" }, "virtualServiceName": "my-service-a.my-apps.svc.cluster.local" } }

Meskipun tidak tercakup dalam tutorial ini, pengontrol juga dapat menerapkan App Mesh Gerbang virtual danRute gerbang. Untuk panduan penerapan sumber daya ini dengan pengontrol, lihat Mengon figurasi Gateway Masuk, atau manifes sampel yang menyertakan sumber daya pada. GitHub

Langkah 3: Buat atau perbarui layanan

Setiap pod yang ingin Anda gunakan dengan App Mesh harus memiliki wadah sidecar App Mesh yang ditambahkan ke dalamnya. Injektor secara otomatis menambahkan wadah sidecar ke pod apa pun yang digunakan dengan label yang Anda tentukan.

  1. Aktifkan otorisasi proxy. Sebaiknya aktifkan setiap penerapan Kubernetes untuk melakukan streaming hanya konfigurasi untuk node virtual App Mesh miliknya sendiri.

    1. Simpan konten berikut ini ke file bernama proxy-auth.json pada komputer Anda. Pastikan untuk menggantinya alternate-colored values dengan milik Anda sendiri.

      JSON
      { "Version":"2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "appmesh:StreamAggregatedResources", "Resource": [ "arn:aws:appmesh:us-east-1:111122223333:mesh/my-mesh/virtualNode/my-service-a_my-apps" ] } ] }
    2. Buat kebijakan.

      aws iam create-policy --policy-name my-policy --policy-document file://proxy-auth.json
    3. Buat peran IAM, lampirkan kebijakan yang Anda buat pada langkah sebelumnya, buat akun layanan Kubernetes, dan ikat kebijakan ke akun layanan Kubernetes. Peran ini memungkinkan pengontrol untuk menambah, menghapus, dan mengubah sumber daya App Mesh.

      eksctl create iamserviceaccount \ --cluster $CLUSTER_NAME \ --namespace my-apps \ --name my-service-a \ --attach-policy-arn arn:aws:iam::111122223333:policy/my-policy \ --override-existing-serviceaccounts \ --approve

      Jika Anda lebih suka membuat akun layanan menggunakan Konsol Manajemen AWS atau AWS CLI, lihat Membuat Peran dan kebijakan IAM untuk akun layanan Anda di Panduan Pengguna Amazon EKS. Jika Anda menggunakan Konsol Manajemen AWS atau AWS CLI untuk membuat akun, Anda juga perlu memetakan peran ke akun layanan Kubernetes. Untuk informasi selengkapnya, lihat Menentukan peran IAM untuk akun layanan Anda di Panduan Pengguna Amazon EKS.

  2. (Opsional) Jika Anda ingin menerapkan penerapan Anda ke pod Fargate, maka Anda perlu membuat profil Fargate. Jika Anda belum menginstal, Anda dapat meng eksctl instalnya dengan instruksi di Memasang atau Mening eksctl katkan di Panduan Pengguna Amazon EKS. Jika Anda lebih suka membuat profil menggunakan konsol, lihat Membuat profil Fargate di Panduan Pengguna Amazon EKS.

    eksctl create fargateprofile --cluster my-cluster --region Region-code --name my-service-a --namespace my-apps
  3. Buat layanan dan deployment Kubernetes. Jika Anda memiliki penerapan yang ada yang ingin Anda gunakan dengan App Mesh, maka Anda perlu menerapkan node virtual, seperti yang Anda lakukan di sub-langkah3. Langkah 2: Menyebarkan sumber daya App Mesh Perbarui penerapan Anda untuk memastikan bahwa labelnya cocok dengan label yang Anda tetapkan pada node virtual, sehingga wadah sidecar ditambahkan secara otomatis ke pod dan pod tersebut digunakan kembali.

    1. Simpan konten berikut ini ke file bernama example-service.yaml pada komputer Anda. Jika Anda mengubah nama namespace dan menggunakan pod Fargate, pastikan nama namespace cocok dengan nama namespace yang Anda tetapkan di profil Fargate Anda.

      apiVersion: v1 kind: Service metadata: name: my-service-a namespace: my-apps labels: app: my-app-1 spec: selector: app: my-app-1 ports: - protocol: TCP port: 80 targetPort: 80 --- apiVersion: apps/v1 kind: Deployment metadata: name: my-service-a namespace: my-apps labels: app: my-app-1 spec: replicas: 3 selector: matchLabels: app: my-app-1 template: metadata: labels: app: my-app-1 spec: serviceAccountName: my-service-a containers: - name: nginx image: nginx:1.19.0 ports: - containerPort: 80
      penting

      Nilai untuk spesifikasi harus sesuai dengan nilai yang Anda tentukan saat membuat simpul virtual di sub-langkah 3Langkah 2: Menyebarkan sumber daya App Mesh, atau wadah sidecar tidak akan disuntikkan ke dalam pod. app matchLabels selector Pada contoh sebelumnya, nilai untuk label adalahmy-app-1. Jika Anda menerapkan gateway virtual, bukan simpul virtual, maka Deployment manifes harus menyertakan hanya wadah Envoy. Untuk informasi selengkapnya tentang gambar yang akan digunakan, lihatGambar utusan. Untuk contoh manfest, lihat contoh penerapan di GitHub.

    2. Menyebarkan layanan.

      kubectl apply -f example-service.yaml
    3. Lihat layanan dan penyebaran.

      kubectl -n my-apps get pods

      Output

      NAME READY STATUS RESTARTS AGE my-service-a-54776556f6-2cxd9 2/2 Running 0 10s my-service-a-54776556f6-w26kf 2/2 Running 0 18s my-service-a-54776556f6-zw5kt 2/2 Running 0 26s
    4. Lihat detail untuk salah satu pod yang digunakan.

      kubectl -n my-apps describe pod my-service-a-54776556f6-2cxd9

      Output dipersingkat

      Name: my-service-a-54776556f6-2cxd9 Namespace: my-app-1 Priority: 0 Node: ip-192-168-44-157.us-west-2.compute.internal/192.168.44.157 Start Time: Wed, 17 Jun 2020 11:08:59 -0500 Labels: app=nginx pod-template-hash=54776556f6 Annotations: kubernetes.io/psp: eks.privileged Status: Running IP: 192.168.57.134 IPs: IP: 192.168.57.134 Controlled By: ReplicaSet/my-service-a-54776556f6 Init Containers: proxyinit: Container ID: docker://e0c4810d584c21ae0cb6e40f6119d2508f029094d0e01c9411c6cf2a32d77a59 Image: 111345817488.dkr.ecr.us-west-2.amazonaws.com/aws-appmesh-proxy-route-manager:v2 Image ID: docker-pullable://111345817488.dkr.ecr.us-west-2.amazonaws.com/aws-appmesh-proxy-route-manager Port: <none> Host Port: <none> State: Terminated Reason: Completed Exit Code: 0 Started: Fri, 26 Jun 2020 08:36:22 -0500 Finished: Fri, 26 Jun 2020 08:36:22 -0500 Ready: True Restart Count: 0 Requests: cpu: 10m memory: 32Mi Environment: APPMESH_START_ENABLED: 1 APPMESH_IGNORE_UID: 1337 APPMESH_ENVOY_INGRESS_PORT: 15000 APPMESH_ENVOY_EGRESS_PORT: 15001 APPMESH_APP_PORTS: 80 APPMESH_EGRESS_IGNORED_IP: 169.254.169.254 APPMESH_EGRESS_IGNORED_PORTS: 22 AWS_ROLE_ARN: arn:aws:iam::111122223333:role/eksctl-app-mesh-addon-iamserviceaccount-my-a-Role1-NMNCVWB6PL0N AWS_WEB_IDENTITY_TOKEN_FILE: /var/run/secrets/eks.amazonaws.com/serviceaccount/token ... Containers: nginx: Container ID: docker://be6359dc6ecd3f18a1c87df7b57c2093e1f9db17d5b3a77f22585ce3bcab137a Image: nginx:1.19.0 Image ID: docker-pullable://nginx Port: 80/TCP Host Port: 0/TCP State: Running Started: Fri, 26 Jun 2020 08:36:28 -0500 Ready: True Restart Count: 0 Environment: AWS_ROLE_ARN: arn:aws:iam::111122223333:role/eksctl-app-mesh-addon-iamserviceaccount-my-a-Role1-NMNCVWB6PL0N AWS_WEB_IDENTITY_TOKEN_FILE: /var/run/secrets/eks.amazonaws.com/serviceaccount/token ... envoy: Container ID: docker://905b55cbf33ef3b3debc51cb448401d24e2e7c2dbfc6a9754a2c49dd55a216b6 Image: 840364872350.dkr.ecr.us-west-2.amazonaws.com/aws-appmesh-envoy:v1.12.4.0-prod Image ID: docker-pullable://840364872350.dkr.ecr.us-west-2.amazonaws.com/aws-appmesh-envoy Port: 9901/TCP Host Port: 0/TCP State: Running Started: Fri, 26 Jun 2020 08:36:36 -0500 Ready: True Restart Count: 0 Requests: cpu: 10m memory: 32Mi Environment: APPMESH_RESOURCE_ARN: arn:aws:iam::111122223333:mesh/my-mesh/virtualNode/my-service-a_my-apps APPMESH_PREVIEW: 0 ENVOY_LOG_LEVEL: info AWS_REGION: us-west-2 AWS_ROLE_ARN: arn:aws:iam::111122223333:role/eksctl-app-mesh-addon-iamserviceaccount-my-a-Role1-NMNCVWB6PL0N AWS_WEB_IDENTITY_TOKEN_FILE: /var/run/secrets/eks.amazonaws.com/serviceaccount/token ... Events: Type Reason Age From Message ---- ------ ---- ---- ------- Normal Pulling 30s kubelet, ip-192-168-44-157.us-west-2.compute.internal Pulling image "111345817488.dkr.ecr.us-west-2.amazonaws.com/aws-appmesh-proxy-route-manager:v2" Normal Pulled 23s kubelet, ip-192-168-44-157.us-west-2.compute.internal Successfully pulled image "111345817488.dkr.ecr.us-west-2.amazonaws.com/aws-appmesh-proxy-route-manager:v2" Normal Created 21s kubelet, ip-192-168-44-157.us-west-2.compute.internal Created container proxyinit Normal Started 21s kubelet, ip-192-168-44-157.us-west-2.compute.internal Started container proxyinit Normal Pulling 20s kubelet, ip-192-168-44-157.us-west-2.compute.internal Pulling image "nginx:1.19.0" Normal Pulled 16s kubelet, ip-192-168-44-157.us-west-2.compute.internal Successfully pulled image "nginx:1.19.0" Normal Created 15s kubelet, ip-192-168-44-157.us-west-2.compute.internal Created container nginx Normal Started 15s kubelet, ip-192-168-44-157.us-west-2.compute.internal Started container nginx Normal Pulling 15s kubelet, ip-192-168-44-157.us-west-2.compute.internal Pulling image "840364872350.dkr.ecr.us-west-2.amazonaws.com/aws-appmesh-envoy:v1.12.4.0-prod" Normal Pulled 8s kubelet, ip-192-168-44-157.us-west-2.compute.internal Successfully pulled image "840364872350.dkr.ecr.us-west-2.amazonaws.com/aws-appmesh-envoy:v1.12.4.0-prod" Normal Created 7s kubelet, ip-192-168-44-157.us-west-2.compute.internal Created container envoy Normal Started 7s kubelet, ip-192-168-44-157.us-west-2.compute.internal Started container envoy

      Pada output sebelumnya, Anda dapat melihat bahwa envoy wadah proxyinit dan ditambahkan ke pod oleh pengontrol. Jika Anda menerapkan layanan contoh ke Fargate, maka envoy wadah ditambahkan ke pod oleh pengontrol, tetapi proxyinit wadah tidak.

  4. (Opsional) Instal add-on seperti Prometheus, Grafana,, Jaeger AWS X-Ray, dan Datadog. Untuk informasi selengkapnya, lihat add-on https://github.com/aws/eks-charts#app-mesh-add-ons App Mesh GitHub aktif dan bagian Observabilitas dari Panduan Pengguna App Mesh.

catatan

Untuk contoh dan panduan lebih lanjut untuk App Mesh, lihat repositori contoh App Mesh.

Langkah 4: Membersihkan

Hapus semua sumber daya contoh yang dibuat dalam tutorial ini. Pengontrol juga menghapus sumber daya yang dibuat di mesh layanan my-mesh App Mesh.

kubectl delete namespace my-apps

Jika Anda membuat profil Fargate untuk layanan contoh, maka hapus.

eksctl delete fargateprofile --name my-service-a --cluster my-cluster --region Region-code

Hapus mesh.

kubectl delete mesh my-mesh

(Opsional) Anda dapat menghapus komponen integrasi Kubernetes.

helm delete appmesh-controller -n appmesh-system

(Opsional) Jika Anda menerapkan komponen integrasi Kubernetes ke Fargate, hapus profil Fargate.

eksctl delete fargateprofile --name appmesh-system --cluster my-cluster --region Region-code