Melakukan aktivasi workload Kubernetes

Halaman ini menunjukkan cara melakukan aktivasi workload Kubernetes dengan Cloud Service Mesh.

Men-deploy layanan Kubernetes

Untuk men-deploy layanan Kubernetes ke cluster dengan Cloud Service Mesh, Anda harus melakukan hal berikut:

  • Buat Layanan Kubernetes untuk semua penampung. Semua Deployment harus memiliki layanan Kubernetes yang terlampir.

  • Beri nama port layanan Anda. Meskipun GKE memungkinkan Anda menentukan port layanan tanpa nama, Cloud Service Mesh mengharuskan Anda memberikan nama untuk port yang cocok dengan protokol port.

  • Beri label pada deployment Anda. Hal ini memungkinkan Anda menggunakan fitur pengelolaan traffic Cloud Service Mesh seperti memisahkan traffic antar-versi layanan yang sama.

Contoh deployment dan layanan berikut mengilustrasikan persyaratan ini:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: helloserver
spec:
  replicas: 1
  selector:
    matchLabels:
      app: helloserver
  template:
    metadata:
      labels:
        app: helloserver
    spec:
      containers:
      - image: gcr.io/google-samples/istio/helloserver:v0.0.1
        imagePullPolicy: Always
        name: main
      restartPolicy: Always
      terminationGracePeriodSeconds: 5
apiVersion: v1
kind: Service
metadata:
  name: hellosvc
spec:
  ports:
  - name: http
    port: 80
    targetPort: 8080
  selector:
    app: helloserver
  type: LoadBalancer

Setelah men-deploy layanan di cluster dengan Cloud Service Mesh, pastikan untuk memasukkan proxy sidecar.

Contoh: Men-deploy contoh Butik Online

Aplikasi contoh Butik Online di repositori anthos-service-mesh-packages diubah dari kumpulan manifes asli di repositori microservices-demo. Dengan mengikuti praktik terbaik, setiap layanan di-deploy di namespace terpisah dengan akun layanan unik.

  1. Buat namespace untuk aplikasi:

    kubectl apply -f \
      DIR_PATH/samples/online-boutique/kubernetes-manifests/namespaces
    

    Output yang diharapkan:

    namespace/ad created
    namespace/cart created
    namespace/checkout created
    namespace/currency created
    namespace/email created
    namespace/frontend created
    namespace/loadgenerator created
    namespace/payment created
    namespace/product-catalog created
    namespace/recommendation created
    namespace/shipping created
    
  2. Aktifkan namespace untuk injeksi. Langkah-langkahnya bergantung pada implementasi bidang kontrol Anda.

    Terkelola (TD)

    Terapkan label injeksi default ke namespace:

    for ns in ad cart checkout currency email frontend loadgenerator payment product-catalog recommendation shipping; do
      kubectl label namespace $ns \
          istio.io/rev- istio-injection=enabled --overwrite
    done;
    

    Dikelola (Istiod)

    Direkomendasikan: Jalankan perintah berikut untuk menerapkan label injeksi default ke namespace:

      for ns in ad cart checkout currency email frontend loadgenerator payment product-catalog recommendation shipping; do
        kubectl label namespace $ns \
            istio.io/rev- istio-injection=enabled --overwrite
      done;
    

    Jika Anda adalah pengguna lama dengan platform kontrol Istiod Terkelola: Sebaiknya gunakan injeksi default, tetapi injeksi berbasis revisi didukung. Gunakan petunjuk berikut:

    1. Jalankan perintah berikut untuk menemukan saluran rilis yang tersedia:

      kubectl -n istio-system get controlplanerevision
      

      Outputnya mirip dengan hal berikut ini:

      NAME                AGE
      asm-managed-rapid   6d7h
      

      Dalam output, nilai di kolom NAME adalah label revisi yang sesuai dengan saluran rilis yang tersedia untuk versi Cloud Service Mesh.

    2. Terapkan label revisi ke namespace:

      for ns in ad cart checkout currency email frontend loadgenerator payment product-catalog recommendation shipping; do
        kubectl label namespace $ns \
            istio-injection- istio.io/rev=REVISION_LABEL --overwrite
      done;
      

    Dalam cluster

    Direkomendasikan: Jalankan perintah berikut untuk menerapkan label injeksi default ke namespace:

      for ns in ad cart checkout currency email frontend loadgenerator payment product-catalog recommendation shipping; do
        kubectl label namespace $ns \
            istio.io/rev- istio-injection=enabled --overwrite
      done;
    

    Sebaiknya gunakan injeksi default, tetapi injeksi berbasis revisi didukung: Gunakan petunjuk berikut:

    1. Gunakan perintah berikut untuk menemukan label revisi di istiod:

      kubectl get deploy -n istio-system -l app=istiod -o \
         jsonpath={.items[*].metadata.labels.'istio\.io\/rev'}'{"\n"}'
      
    2. Terapkan label revisi ke namespace. Dalam perintah berikut, REVISION_LABEL adalah nilai label revisi istiod yang Anda catat di langkah sebelumnya.

      for ns in ad cart checkout currency email frontend loadgenerator payment product-catalog recommendation shipping; do
        kubectl label namespace $ns \
            istio-injection- istio.io/rev=REVISION_LABEL --overwrite
      done;
      
  3. Men-deploy aplikasi contoh ke cluster.

    1. Buat akun layanan dan deployment:

      kubectl apply -f \
       DIR_PATH/samples/online-boutique/kubernetes-manifests/deployments
      

      Output yang diharapkan:

      serviceaccount/ad created
      deployment.apps/adservice created
      serviceaccount/cart created
      deployment.apps/cartservice created
      serviceaccount/checkout created
      deployment.apps/checkoutservice created
      serviceaccount/currency created
      deployment.apps/currencyservice created
      serviceaccount/email created
      deployment.apps/emailservice created
      serviceaccount/frontend created
      deployment.apps/frontend created
      serviceaccount/loadgenerator created
      deployment.apps/loadgenerator created
      serviceaccount/payment created
      deployment.apps/paymentservice created
      serviceaccount/product-catalog created
      deployment.apps/productcatalogservice created
      serviceaccount/recommendation created
      deployment.apps/recommendationservice created
      serviceaccount/shipping created
      deployment.apps/shippingservice created
      
    2. Buat layanan:

      kubectl apply -f \
       DIR_PATH/samples/online-boutique/kubernetes-manifests/services
      

      Output yang diharapkan:

      service/adservice created
      service/cartservice created
      service/checkoutservice created
      service/currencyservice created
      service/emailservice created
      service/frontend created
      service/frontend-external created
      service/paymentservice created
      service/productcatalogservice created
      service/recommendationservice created
      service/shippingservice created
      
    3. Buat entri layanan:

      kubectl apply -f \
       DIR_PATH/samples/online-boutique/istio-manifests/allow-egress-googleapis.yaml
      

      Output yang diharapkan:

      serviceentry.networking.istio.io/allow-egress-googleapis created
      serviceentry.networking.istio.io/allow-egress-google-metadata created
      

Memberi nama port layanan

Agar dapat disertakan dalam Cloud Service Mesh, port layanan harus diberi nama, dan namanya harus menyertakan protokol port, misalnya:

apiVersion: v1
kind: Service
metadata:
  name: ratings
  labels:
    app: ratings
    service: ratings
spec:
  ports:
  - port: 9080
    name: http

Nama port layanan dapat menyertakan akhiran dalam sintaksis berikut: name: protocol[-suffix] dengan tanda kurung siku menunjukkan akhiran opsional yang harus dimulai dengan tanda hubung, misalnya:

kind: Service
metadata:
  name: myservice
spec:
  ports:
  - number: 3306
    name: mysql
  - number: 80
    name: http-web

Agar metrik ditampilkan di konsol Google Cloud, port layanan harus diberi nama dengan salah satu protokol berikut: http, http2, atau grpc. Port layanan yang diberi nama dengan protokol https diperlakukan sebagaitcp, dan metrik tidak ditampilkan untuk layanan tersebut.

Memasukkan proxy sidecar

Bagian ini membahas cara mengonfigurasi injeksi proxy sidecar dengan Cloud Service Mesh untuk meningkatkan keamanan, keandalan, dan visibilitas jaringan. Fungsi ini diabstraksi dari penampung utama aplikasi dan diterapkan dalam proxy out-of-process umum (sidecar), yang dikirim sebagai penampung terpisah di Pod yang sama. Anda dapat menggunakan fitur Cloud Service Mesh tanpa mendesain ulang aplikasi produksi untuk berpartisipasi dalam mesh layanan.

Injeksi proxy sidecar otomatis (injeksi otomatis) terjadi saat Cloud Service Mesh mendeteksi label namespace yang Anda konfigurasikan untuk Pod workload. Proxy menangkap semua traffic masuk dan keluar ke workload serta berkomunikasi dengan Cloud Service Mesh.

Mengaktifkan injeksi sidecar otomatis

  1. Aktifkan namespace untuk injeksi. Langkah-langkahnya bergantung pada implementasi bidang kontrol Anda.

    Terkelola (TD)

    1. Terapkan label injeksi default ke namespace:
    kubectl label namespace NAMESPACE
        istio.io/rev- istio-injection=enabled --overwrite
    

    Dikelola (Istiod)

    Direkomendasikan: Jalankan perintah berikut untuk menerapkan label injeksi default ke namespace:

      kubectl label namespace NAMESPACE \
          istio.io/rev- istio-injection=enabled --overwrite
    

    Jika Anda adalah pengguna lama dengan platform kontrol Istiod Terkelola: Sebaiknya gunakan injeksi default, tetapi injeksi berbasis revisi didukung. Gunakan petunjuk berikut:

    1. Jalankan perintah berikut untuk menemukan saluran rilis yang tersedia:

      kubectl -n istio-system get controlplanerevision
      

      Outputnya mirip dengan hal berikut ini:

      NAME                AGE
      asm-managed-rapid   6d7h
      

      CATATAN: Jika dua revisi bidang kontrol muncul dalam daftar di atas, hapus salah satunya. Memiliki beberapa saluran bidang kontrol di cluster tidak didukung.

      Dalam output, nilai di kolom NAME adalah label revisi yang sesuai dengan saluran rilis yang tersedia untuk versi Cloud Service Mesh.

    2. Terapkan label revisi ke namespace:

      kubectl label namespace NAMESPACE \
          istio-injection- istio.io/rev=REVISION_LABEL --overwrite
      

    Dalam cluster

    Direkomendasikan: Jalankan perintah berikut untuk menerapkan label injeksi default ke namespace:

      kubectl label namespace NAMESPACE \
          istio.io/rev- istio-injection=enabled --overwrite
    

    Sebaiknya gunakan injeksi default, tetapi injeksi berbasis revisi didukung: Gunakan petunjuk berikut:

    1. Gunakan perintah berikut untuk menemukan label revisi di istiod:

      kubectl get deploy -n istio-system -l app=istiod -o \
         jsonpath={.items[*].metadata.labels.'istio\.io\/rev'}'{"\n"}'
      
    2. Terapkan label revisi ke namespace. Dalam perintah berikut, REVISION_LABEL adalah nilai label revisi istiod yang Anda catat di langkah sebelumnya.

      kubectl label namespace NAMESPACE \
          istio-injection- istio.io/rev=REVISION_LABEL --overwrite
      
  2. Mulai ulang pod yang terpengaruh, menggunakan langkah-langkah di bagian berikutnya.

  3. Anotasikan namespace demo sebagai berikut:

    kubectl annotate --overwrite namespace NAMESPACE \
    mesh.cloud.google.com/proxy='{"managed":"true"}'
    

Mulai ulang Pod untuk mengupdate proxy sidecar

Dengan injeksi sidecar otomatis, Anda dapat mengupdate sidecar untuk Pod yang ada dengan memulai ulang Pod:

Cara memulai ulang Pod bergantung pada apakah Pod dibuat sebagai bagian dari Deployment.

  1. Jika Anda menggunakan Deployment, mulai ulang Deployment, yang akan memulai ulang semua Pod dengan sidecar:

    kubectl rollout restart deployment -n NAMESPACE

    Jika Anda tidak menggunakan Deployment, hapus Pod, dan Pod akan otomatis dibuat ulang dengan sidecar:

    kubectl delete pod -n NAMESPACE --all
  2. Pastikan semua Pod di namespace telah memasukkan sidecar:

    kubectl get pod -n NAMESPACE

    Dalam contoh output berikut dari perintah sebelumnya, perhatikan bahwa kolom READY menunjukkan ada dua penampung untuk setiap beban kerja Anda: penampung utama dan penampung untuk proxy sidecar.

    NAME                    READY   STATUS    RESTARTS   AGE
    WORKLOAD           2/2     Running   0          20s
    ...