Menyelesaikan masalah dukungan VM di Anthos Service Mesh

Langkah-langkah dan log berikut berguna untuk memecahkan masalah terkait dukungan VM Anthos Service Mesh.

Men-debug VM

Jika Anda melihat bahwa instance VM berjalan tetapi tidak dapat dijangkau dari mesh, lakukan langkah-langkah berikut pada instance VM.

Verifikasi agen

  1. Periksa kondisi proxy envoy:

    curl localhost:15000/ready -v
    
  2. Memeriksa log error envoy

    less /var/log/envoy/envoy.err.log
    
  3. Periksa apakah ada service-proxy-agent error:

    journalctl -u service-proxy-agent
    
  4. Periksa syslog dalam log Kemampuan Observabilitas Google Cloud untuk instance atau pada VM di bagian /var/log/syslog untuk Debian, dan /var/log/messages untuk Centos.

Memverifikasi kondisi proxy

  1. Untuk men-debug konfigurasi proxy, jalankan perintah berikut di VM:

    curl localhost:15000/config_dump > config.out
    
  2. Salin file tersebut dan jalankan perintah berikut:

    istioctl proxy-config [cluster|route|listener] --file config.out
    

Error token tidak valid

Anda mungkin melihat error yang serupa dengan berikut ini dalam log error envoy:

E0217 17:59:17.206995798    2411 oauth2_credentials.cc:152]  Call to http server ended with error 500 [{
  "error": "invalid_target",
  "error_description": "federated token response does not have access token. {\"error\":\"invalid_grant\",\"error_description\":\"JWT expired.\"}",
  "error_uri": ""
}].

Dalam hal ini, periksa apakah masa berlaku token di /var/run/secrets/tokens/istio-token pada VM telah berakhir dan pastikan nilai exp (epoch detik) belum berlalu:

cat /var/run/secrets/tokens/istio-token | cut -d '.' -f2 | base64 -d | python -m json.tool
{
    ...
    "azp": "...",
    "email": "example-service-account@developer.gserviceaccount.com",
    "email_verified": true,
    "exp": 1613995395,
    "google": {
        "compute_engine": {
            "instance_creation_timestamp": 1613775765,
            "instance_id": "5678",
            "instance_name": "vm-instance-03-0mqh",
            "project_id": "...",
            "project_number": 1234,
            "zone": "us-central1-c"
        }
    },
    "iat": ...,
    "iss": "https://accounts.google.com",
    "sub": "..."
}

Info peringatan distribusi OS tidak didukung

Dalam memverifikasi agen, jika Anda melihat pesan peringatan yang mirip dengan berikut ini di log service-proxy-agent:

E0217 17:59:17.206995798    2021-04-09T21:21:29.6091Z service-proxy-agent Warn
Detected image is unsupported: [Ubuntu|Fedora|Suse]. Envoy may not work correctly.

Artinya, distribusi Linux Anda mungkin tidak didukung, yang dapat menyebabkan proxy Anda memiliki perilaku yang tidak terduga.

Men-debug cluster

Gunakan langkah-langkah berikut untuk memecahkan masalah cluster Anda.

Memastikan bahwa pendaftaran otomatis berfungsi

  1. Periksa WorkloadEntry yang dibuat secara otomatis oleh istiod:

    kubectl get workloadentry -n WORKLOAD_NAMESPACE
    

    Selain itu, Anda dapat memeriksa keberadaan Kubernetes Object Browser.

  2. Jika tidak ada, periksa error dalam log istiod, yang akan tersedia untuk Anda di Kemampuan Observasi Google Cloud. Atau, Anda dapat mengambilnya secara langsung:

    kubectl -n istio-system get pods -l app=istiod
    

    Output yang diharapkan mirip dengan:

    NAME                                       READY   STATUS    RESTARTS   AGE
    istiod-asm-190-1-7f6699cfb-5mzxw           1/1     Running   0          5d13h
    istiod-asm-190-1-7f6699cfb-pgvpf           1/1     Running   0          5d13h
    
  3. Tetapkan variabel lingkungan pod dan gunakan untuk mengekspor log:

    export ISTIO_POD=istiod-asm-190-1-7f6699cfb-5mzxw
    kubectl logs -n istio-system ${ISTIO_POD} | grep -i 'auto-register\|WorkloadEntry'
    

Memeriksa proxy yang terhubung

Anda dapat menggunakan perintah proxy-status untuk menampilkan semua proxy yang terhubung, termasuk proxy untuk VM:

istioctl proxy-status

Output akan menampilkan proxy yang terhubung yang mirip dengan:

NAME                                                    CDS        LDS        EDS        RDS          ISTIOD                               VERSION
details-v1-5f449bdbb9-bhl8d.default                     SYNCED     SYNCED     SYNCED     SYNCED       istiod-asm-190-1-7f6699cfb-5mzxw     1.9.0-asm.1
httpbin-779c54bf49-647vd.default                        SYNCED     SYNCED     SYNCED     SYNCED       istiod-asm-190-1-7f6699cfb-pgvpf     1.9.0-asm.1
istio-eastwestgateway-5b6d4ddd9d-5rzx2.istio-system     SYNCED     SYNCED     SYNCED     NOT SENT     istiod-asm-190-1-7f6699cfb-pgvpf     1.9.0-asm.1
istio-ingressgateway-66b6ddd7cb-ctb6b.istio-system      SYNCED     SYNCED     SYNCED     SYNCED       istiod-asm-190-1-7f6699cfb-pgvpf     1.9.0-asm.1
istio-ingressgateway-66b6ddd7cb-vk4bb.istio-system      SYNCED     SYNCED     SYNCED     SYNCED       istiod-asm-190-1-7f6699cfb-5mzxw     1.9.0-asm.1
vm-instance-03-39b3.496270428946                        SYNCED     SYNCED     SYNCED     SYNCED       istiod-asm-190-1-7f6699cfb-pgvpf     1.9.0
vm-instance-03-nh5k.496270428946                        SYNCED     SYNCED     SYNCED     SYNCED       istiod-asm-190-1-7f6699cfb-pgvpf     1.9.0
vm-instance-03-s4nl.496270428946                        SYNCED     SYNCED     SYNCED     SYNCED       istiod-asm-190-1-7f6699cfb-5mzxw     1.9.0

Untuk mengetahui informasi selengkapnya tentang opsi perintah, lihat istioctl proxy-config.

Memeriksa konfigurasi workload identity

Periksa status mesh untuk mengetahui potensi error dalam cluster Anda. Perhatikan bahwa versi gcloud terbaru diperlukan. Untuk mengetahui informasi selengkapnya, lihat update ke versi terbaru.

gcloud alpha container hub mesh describe --project=PROJECT_ID

Konfigurasi yang valid akan memiliki kode status OK untuk cluster anggota:

createTime: '2021-06-15T21:56:10.221032150Z'
featureState:
  detailsByMembership:
    projects/<your project number>/locations/global/memberships/<your cluster name>:
      code: OK
      description: Revision(s) ready for use: istiod-asm-195-2.
      updateTime: 2021-06-15T21:56:10.221032402Z
  lifecycleState: ENABLED
name: projects/<your project name>/locations/global/features/servicemesh
servicemeshFeatureSpec: {}
updateTime: '2021-06-15T21:56:10.221032402Z'

Jika VM tidak dikonfigurasi dengan benar, kode status akan menjadi WARNING dengan detail tambahan dalam deskripsi:

createTime: '2021-06-15T22:56:10.227167202Z'
featureState:
  detailsByMembership:
    projects/<your project number>/locations/global/memberships/<your cluster name>:
      code: WARNING
      description: |-
        Revision(s) ready for use: istiod-asm-195-2.
        WorkloadGroup <namespace>/<workloadgroup name> missing ServiceAccount field, please see https://cloud.google.com/service-mesh/v1.11/docs/troubleshooting/troubleshoot-vms#verify_the_workloadgroup_is_set_up_correctly.
      servicemeshFeatureState: {}
      updateTime: '2021-06-15T22:56:00.220164192Z'
  lifecycleState: ENABLED
name: projects/<your project name>/locations/global/features/servicemesh
servicemeshFeatureSpec: {}
updateTime: '2021-06-15T22:56:10.227167402Z'

Memverifikasi bahwa penyedia identitas disiapkan dengan benar

Periksa kolom resource IdentityProvider:

 kubectl describe identityprovider

Pastikan kolom memenuhi persyaratan berikut:

  • Kolom serviceAccount disetel ke request.auth.claims["email"]
  • Kolom issuerURI disetel ke https://accounts.google.com (saat ini kami hanya mendukung google sebagai publisherURI)
  • Kolom name penyedia di bagian metadata harus disetel ke google, yang merupakan satu-satunya penyedia yang saat ini didukung.

    Contoh CR IdentityProvider yang valid:

    apiVersion: security.cloud.google.com/v1alpha1
    kind: IdentityProvider
    metadata:
      name: google
    spec:
      authentication:
        oidc:
          issuerUri: https://accounts.google.com
      serviceAccount: request.auth.claims["email"]
    

Memastikan WorkloadGroup disiapkan dengan benar

Periksa WorkloadGroup:

 kubectl get workloadgroup -n WORKLOAD_NAMESPACE

Pastikan hasilnya memenuhi persyaratan berikut:

  • Kolom serviceAccount ditetapkan dengan benar, misalnya 373206437219-compute@developer.gserviceaccount.com dengan akun yang sama dengan akun layanan yang digunakan oleh instance VM
  • security.cloud.google.com/IdentityProvider pada kolom anotasi ditetapkan, misalnya, security.cloud.google.com/IdentityProvider: google
  • Grup beban kerja merujuk ke IdentityProvider yang valid, yang dapat diverifikasi dengan memeriksa penyedia identitas yang ada:

    kubectl describe identityprovider
    

    Output harus berupa daftar penyedia yang ada seperti ini:

     NAME     AGE
     google   39m
    

    Periksa kolom security.cloud.google.com/IdentityProvider di WorkloadGroup apakah penyedia ada dalam daftar penyedia yang sudah ada.

    Contoh CR WorkloadGroup yang valid:

    apiVersion: networking.istio.io/v1alpha3
    kind: WorkloadGroup
    metadata:
    name: wg-a
    namespace: foo
    spec:
    metadata:
      annotations:
        security.cloud.google.com/IdentityProvider: google
      labels:
        app: wg-a
    template:
      ports:
        grpc: 3550
        http: 8080
      serviceAccount: 373206437219-compute@developer.gserviceaccount.com
    

Ditemukan Error Internal

Jika Anda menerima pesan Internal Error Found, lihat Mendapatkan dukungan.

Panduan pemecahan masalah Istio VM

Untuk langkah-langkah pemecahan masalah lainnya, lihat Men-debug Mesin Virtual.