Proxy Envoy gagal dengan error HTTP 403 Forbidden di Apigee Adapter for Envoy

Anda sedang melihat dokumentasi Apigee Edge.
Buka Dokumentasi Apigee X.
info

Gejala

Proxy Envoy gagal dengan error HTTP 403 Forbidden saat dipanggil melalui Adaptor Apigee untuk Envoy.

Pesan error

Pesan error berikut akan ditampilkan:

HTTP/1.1 403 Forbidden
content-length: 19
content-type: text/plain
date: Tue, 03 Nov 2020 00:20:10 GMT
server: istio-envoy

Kemungkinan penyebab

Proxy Envoy akan memunculkan error 403 HTTP jika salah satu kondisi berikut terjadi:

Penyebab Deskripsi Petunjuk pemecahan masalah berlaku untuk
Produk API tidak diaktifkan Produk API tidak diaktifkan untuk lingkungan tertentu. Pengguna Edge Public dan Private Cloud
Jalur URI layanan target tidak ada di Produk API Jalur URI layanan target tidak ada atau tidak ditambahkan ke produk API berdasarkan API Google Cloud Platform. Pengguna Edge Public dan Private Cloud
Nama host tidak ada di Produk API Nama host yang diberikan dalam permintaan API klien tidak ada di produk API pada Apigee target layanan jarak jauh. Pengguna Edge Public dan Private Cloud
Kunci API tidak ada di header permintaan Kunci API tidak diteruskan di header HTTP x-api-key. Pengguna Edge Public dan Private Cloud
Kunci API tidak valid Kunci API yang diteruskan sebagai bagian dari permintaan tidak valid. Pengguna Edge Public dan Private Cloud
Adaptor Apigee untuk Envoy tidak dapat berkomunikasi dengan proxy API layanan jarak jauh Adaptor Apigee untuk Envoy tidak dapat berkomunikasi dengan proxy API layanan jarak jauh. Pengguna Edge Public dan Private Cloud
Proxy Envoy tidak dapat berkomunikasi dengan Adaptor Apigee untuk Envoy Proxy Envoy tidak dapat berkomunikasi dengan Adaptor Apigee untuk Envoy Pengguna Edge Public dan Private Cloud

Sebelum memulai

  1. Pastikan bahwa Anda mendapatkan pesan respons 403 Forbidden dari Proxy Envoy. Contoh:
    curl -i -H "x-api-key: $API_KEY" http://httpbin:8080/echo
    
    HTTP/1.1 403 Forbidden
    content-length: 19
    content-type: text/plain
    date: Tue, 12 Jan 2021 08:18:08 GMT
    server: envoy
    RBAC: access denied
    
  2. Aktifkan log debug:

    Pastikan Anda telah mengaktifkan log debug di Adaptor Apigee untuk Envoy guna mengambil detail selengkapnya tentang error tersebut. Jika tidak, hentikan Adaptor Apigee untuk Envoy, lalu mulai lagi, mengaktifkan log debug menggunakan perintah berikut:

    apigee-remote-service-envoy -c config.yaml -l debug
    

Penyebab: Produk API tidak diaktifkan

Error ini akan terjadi jika Produk API tertentu yang digunakan oleh Envoy Proxy tidak diaktifkan di lingkungan tertentu tempat panggilan API dipanggil.

Diagnosis

Lakukan langkah-langkah berikut untuk mendiagnosis masalah:

  1. Aktifkan log debug seperti yang dijelaskan pada langkah 2 di atas.
  2. Periksa log Adaptor Apigee untuk Envoy dan pastikan pesan berikut ditampilkan di bagian Authorizing request:
    product: API_PRODUCT_NAME not found
    

    Contoh Output Log Debug:

    2021-01-12T08:18:08.124Z        DEBUG   auth/auth.go:98 Authenticate: key: 7mQIG..., claims: map[string]interface {}(nil)
    2021-01-12T08:18:08.124Z        DEBUG   auth/verify_api_key.go:106      fetchToken fetching: 7mQIG...
    2021-01-12T08:18:08.589Z        DEBUG   auth/auth.go:125        using api key from request
    2021-01-12T08:18:08.589Z        DEBUG   auth/auth.go:157        Authenticate success: &auth.Context{Context:(*server.Handle
    r)(0xc0001a0600), ClientID:"7mQIG...", AccessToken:"", Application:"ENVOY-APP-1", APIProducts:[]string{"ENVOY-PRODUCT-1"},
    Expires:time.Time{wall:0x0, ext:63746037188, loc:(*time.Location)(0x14a3be0)}, DeveloperEmail:"[---masked---]", Scopes:[]
    string{""}, APIKey:"7mQIG..."}
    2021-01-12T08:18:08.589Z        DEBUG   product/manager.go:89
    Authorizing request:
      products: [ENVOY-PRODUCT-1]
      scopes: []
      operation: GET /echo
      target: httpbin:8080
      - product: ENVOY-PRODUCT-1
        not found
    

    Contoh di atas menunjukkan bahwa produk API ENVOY-PRODUCT-1 tidak ditemukan di Adaptor Apigee untuk Envoy.

    Untuk mengetahui informasi selengkapnya tentang logging Adaptor Apigee untuk Envoy, lihat Logging.

  3. Jika Anda melihat pesan ini saat memberi otorisasi permintaan API, kemungkinan besar ini menunjukkan bahwa Produk API tertentu tidak diaktifkan untuk lingkungan tertentu tempat Anda melakukan panggilan API.
  4. Lakukan langkah-langkah berikut untuk memastikannya:
    1. Login ke UI Edge.
    2. Pada bagian Publish > API produk, klik produk API tertentu yang digunakan untuk mengonfigurasi Adaptor Apigee untuk Envoy.
    3. Verifikasi bahwa lingkungan spesifik tempat Anda membuat permintaan API dalam produk API.
    4. Jika lingkungan spesifik tidak diaktifkan dalam Produk API, itulah penyebabnya untuk masalah ini.
  5. Jika lingkungan tertentu sudah diaktifkan, buka Penyebab: Jalur URI layanan target tidak ada di Produk API.

Resolusi

Jika lingkungan tertentu tidak diaktifkan dalam produk API, lakukan langkah-langkah berikut untuk mengatasi masalah tersebut:

  1. Login ke UI Edge.
  2. Pada bagian Publish > produk API, klik produk API tertentu yang Anda gunakan untuk mengonfigurasi Adaptor Apigee untuk Envoy.
  3. Di API products > Nama produk, klik Edit.
  4. Aktifkan lingkungan spesifik tempat Anda ingin membuat permintaan API, dengan memilih kotak centang {i>relevant environment<i}.
  5. Klik Simpan.

Penyebab: Jalur URI layanan target tidak ada di produk API

Error ini akan terjadi jika jalur URI target tidak ditentukan dalam Produk API tertentu yang digunakan oleh {i>Envoy Proxy<i}.

Diagnosis

Lakukan langkah-langkah berikut untuk mendiagnosis masalah:

  1. Aktifkan log debug seperti yang dijelaskan pada langkah 2 di atas.
  2. Periksa log Adaptor Apigee untuk Envoy dan pastikan pesan berikut ditampilkan untuk Produk API tertentu yang terkait dengan target tertentu di bagian Authorizing request:

    no path: REQUEST_URI_PATH
    

    Contoh Output Log Debug:

    2021-01-12T08:09:02.604Z        DEBUG   auth/auth.go:98 Authenticate: key: 7mQIG..., claims: map[string]interface {}(nil)
    2021-01-12T08:09:02.605Z        DEBUG   auth/auth.go:125        using api key from request
    2021-01-12T08:09:02.605Z        DEBUG   auth/auth.go:157        Authenticate success: &auth.Context{Context:(*server.Handle
    r)(0xc0001a4180), ClientID:"7mQIG...", AccessToken:"", Application:"ENVOY-APP-1", APIProducts:[]string{"ENVOY-PRODUCT-1"},
    Expires:time.Time{wall:0x0, ext:63746036507, loc:(*time.Location)(0x14a3be0)}, DeveloperEmail:"[---masked---]", Scopes:[]
    string{""}, APIKey:"7mQIG..."}
    2021-01-12T08:09:02.605Z        DEBUG   product/manager.go:89
    Authorizing request:
      products: [ENVOY-PRODUCT-1]
      scopes: []
      operation: GET /echo1
      target: httpbin:8080
      - product: ENVOY-PRODUCT-1
        no path: /echo1
    2021-01-12T08:09:02.605Z        DEBUG   server/authorization.go:228     sending ok (actual: PERMISSION_DENIED)

    Contoh output menampilkan pesan:

    no path: /echo1
    

    Hal ini menunjukkan bahwa jalur /echo1 tidak ditemukan dalam produk API ENVOY-PRODUCT-1.

  3. Jika Anda melihat pesan no path: REQUEST_URI_PATH pada Adaptor Apigee untuk log debug Envoy, maka itulah penyebab masalah ini. Jika tidak, buka Penyebab: Nama host tidak ada di produk API.

Resolusi

Jika URI permintaan spesifik tidak ditambahkan ke Produk API untuk target tertentu, maka lakukan langkah berikut untuk menyelesaikan masalah tersebut:

  1. Login ke UI Edge.
  2. Pada bagian Publish > API produk, klik produk API tertentu yang digunakan untuk mengonfigurasi Adaptor Apigee untuk Envoy.
  3. Di API products > Nama produk, klik Edit.
  4. Di panel API resources, tambahkan URI permintaan API ke produk API.
  5. Pantau Adaptor Apigee untuk log Envoy dan tunggu hingga Adaptor Apigee untuk Envoy mengambil produk API yang diupdate. Setelah itu, kirim permintaan API lain untuk memverifikasi perbaikan.

Penyebab: Nama host tidak ada pada produk API

Error ini akan terjadi jika kombinasi nama host dan port target tidak ditambahkan ke Produk API yang digunakan oleh Envoy Proxy.

Diagnosis

Lakukan langkah-langkah berikut untuk mendiagnosis masalah:

  1. Aktifkan log debug seperti yang dijelaskan pada langkah 2 di atas.
  2. Periksa log Adaptor Apigee untuk Envoy dan pastikan pesan berikut ditampilkan untuk Produk API tertentu yang terkait dengan target tertentu di bagian Authorizing request:

    no targets: HOSTNAME:PORT
    

    Contoh Output Log Debug:

    2021-01-12T08:12:06.019Z        DEBUG   auth/auth.go:98 Authenticate: key: 7mQIG..., claims: map[string]interface {}(nil)
    2021-01-12T08:12:06.019Z        DEBUG   auth/auth.go:125        using api key from request
    2021-01-12T08:12:06.019Z        DEBUG   auth/auth.go:157        Authenticate success: &auth.Context{Context:(*server.Handle
    r)(0xc0001a4180), ClientID:"7mQIG...", AccessToken:"", Application:"ENVOY-APP-1", APIProducts:[]string{"ENVOY-PRODUCT-1"},
    Expires:time.Time{wall:0x0, ext:63746036507, loc:(*time.Location)(0x14a3be0)}, DeveloperEmail:"[---masked---]", Scopes:[]
    string{""}, APIKey:"7mQIG..."}
    2021-01-12T08:12:06.019Z        DEBUG   product/manager.go:89
    Authorizing request:
      products: [ENVOY-PRODUCT-1]
      scopes: []
      operation: GET /echo
      target: httpbin1:8080
      - product: ENVOY-PRODUCT-1
        no targets: httpbin1:8080
    2021-01-12T08:12:06.020Z        DEBUG   server/authorization.go:228     sending ok (actual: PERMISSION_DENIED)

    Contoh di atas menunjukkan bahwa kombinasi nama host dan port httpbin1:8080 tidak ditemukan dalam produk API ENVOY-PRODUCT-1.

  3. Jika Adaptor Apigee untuk log Envoy berisi entri dengan pesan no targets: HOSTNAME:PORT saat memberi otorisasi permintaan, maka ini adalah penyebab masalah tersebut. Jika tidak, buka Penyebab: Kunci API tidak ada di header permintaan.

Resolusi

Jika kombinasi nama host dan port target tidak ditambahkan ke produk API, lakukan tindakan langkah-langkah berikut untuk menyelesaikan masalah tersebut:

  1. Login ke UI Edge.
  2. Pada bagian Publish > API produk, klik produk API tertentu yang digunakan untuk mengonfigurasi Adaptor Apigee untuk Envoy.
  3. Di API products > Nama produk, klik Edit.
  4. Di panel Apigee remote service targets, tambahkan nama host target dan port, lalu klik Save.

    Jika Anda tidak melihat bagian Target layanan jarak jauh Apigee di UI, menambahkan atribut khusus ke produk API dengan nama apigee-remote-service-targets dan tambahkan Nilai HOSTNAME:PORT menggunakan Edge API. Contoh:

    curl https://api.enterprise.apigee.com/v1/organizations/$ORG/apiproducts/$ENVOY_PRODUCT \
        -X GET \
        -H "Authorization: Bearer $ACCESS_TOKEN" \
        -H "Content-Type:application/json" \
        -d \
    {
        "apiResources": [
            "/echo",
            "/verifyApiKey"
        ],
        "approvalType": "auto",
        "attributes": [
            {
                "name": "access",
                "value": "public"
            },
            {
                "name": "apigee-remote-service-targets",
                "value": "localhost:8080"
            }
        ],
        "createdAt": 1610435989556,
        "createdBy": "---masked---",
        "description": "",
        "displayName": "ENVOY-PRODUCT-1",
        "environments": [
            "test"
        ],
        "lastModifiedAt": 1612234134060,
        "lastModifiedBy": "---masked---",
        "name": "ENVOY-PRODUCT-1",
        "proxies": [
            "remote-service"
        ],
        "scopes": []
    }
    
  5. Setelah tugas di atas selesai, pantau Adaptor Apigee untuk log Envoy dan tunggu hingga Adaptor Apigee untuk Envoy mengambil produk API yang telah diupdate. Setelah itu, kirim API lain untuk memverifikasi perbaikan tersebut.

Penyebab: Kunci API tidak ada di header permintaan

Error ini akan terjadi jika Kunci API tidak diteruskan sebagai bagian dari header permintaan.

Diagnosis

Lakukan langkah-langkah berikut untuk mendiagnosis masalah:

  1. Aktifkan log debug seperti yang dijelaskan pada langkah 2 di atas.
  2. Periksa log Adaptor Apigee untuk Envoy dan pastikan Anda melihat Pesan [missing authentication] di bawah Authenticate error bagian.

    Contoh Output Log Debug:

    2021-01-12T08:20:31.461Z        DEBUG   auth/auth.go:98 Authenticate: key: , claims: map[string]interface {}(nil)
    2021-01-12T08:20:31.461Z        DEBUG   auth/auth.go:159
    Authenticate error: &auth.Context{Context:(*server.Handler)
    (0xc0001a0600), ClientID:"", AccessToken:"", Application:"", APIProducts:[]string(nil), Expires:time.Time{wall:0x0, ext:0,
    loc:(*time.Location)(nil)}, DeveloperEmail:"", Scopes:[]string(nil), APIKey:""} [missing authentication]
    2021-01-12T08:20:31.461Z        DEBUG   server/authorization.go:205     sending denied: UNAUTHENTICATED
    2021-01-12T08:20:32.448Z        DEBUG   server/header_context.go:68     No context header x-apigee-api, using target header
    : :authority

    Contoh output yang ditunjukkan di atas memiliki pesan [missing authentication]. Pesan ini menunjukkan bahwa kunci API tidak diteruskan sebagai bagian dari header permintaan.

  3. Jika Adaptor Apigee untuk log Envoy berisi entri log dengan pesan [missing authentication]di bagian Authenticate error , berarti ini adalah penyebab masalah tersebut. Jika tidak, buka Penyebab: Kunci API tidak valid.

Resolusi

Jika error [missing authentication] ditampilkan di Adaptor Apigee untuk log Envoy, lakukan langkah-langkah berikut untuk menyelesaikan masalah:

  1. Periksa apakah klien telah mengirim kunci API menggunakan header HTTP x-api-key di terhadap permintaan API. Jika tidak, minta klien untuk mengirim kunci API di header HTTP x-api-key.
  2. Memeriksa file konfigurasi Adaptor Apigee untuk Envoy dan memverifikasi bahwa kunci API default nama header x-api-key telah diubah, misalnya:
    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: apigee-remote-service-envoy
      namespace: apigee
    data:
      config.yaml: |
        global:
          tls:
            ...
        tenant:
          ...
        auth:
          target_header: api-key
    

    Dalam contoh di atas, nama header Kunci API default telah diubah menjadi api-key. Dalam hal ini, Anda harus meneruskan Kunci API sebagai bagian dari header api-key.

  3. Jika nama header kunci API default telah diubah, minta klien untuk menggunakan header Nama header kunci API lalu kirim permintaan API lain dan verifikasi apakah masalah tersebut dapat diselesaikan.

Penyebab: Kunci API tidak valid

Error ini akan terjadi jika Kunci API yang tidak valid diteruskan sebagai bagian dari header permintaan.

Diagnosis

Lakukan langkah-langkah berikut untuk mendiagnosis masalah:

  1. Aktifkan log debug seperti yang dijelaskan pada langkah 2 di atas.
  2. Periksa log Adaptor Apigee untuk Envoy dan pastikan Anda melihat pesan tersebut [permission denied] di bawah bagian Authenticate error. Ini biasanya ditampilkan setelah Kunci API diambil oleh Adaptor yang ditunjukkan oleh pesan fetchToken fetching: API_KEY.

    Contoh Output Log Debug:

    2021-01-12T05:01:07.198Z        DEBUG   auth/auth.go:98 Authenticate: key: 123, claims: map[string]interface {}(nil)
    2021-01-12T05:01:07.198Z        DEBUG   auth/verify_api_key.go:106      fetchToken fetching: API_KEY
    2021-01-12T05:01:09.102Z        DEBUG   server/header_context.go:68     No context header x-apigee-api, using target header: :authority
    2021-01-12T05:01:09.831Z        DEBUG   auth/auth.go:159        Authenticate error: &auth.Context{Context:(*server.Handler)(0xc0001640c0), ClientID:"", AccessToken:"", Application:"", APIProducts:[]string(nil), Expires:time.Time{wall:0x0, ext:0, loc:(*time.Location)(nil)}, DeveloperEmail:"", Scopes:[]string(nil), APIKey:""} [permission denied]
    2021-01-12T05:01:09.832Z        DEBUG   server/authorization.go:228     sending ok (actual: PERMISSION_DENIED)
    

    Dalam contoh ini, kunci API yang dikirim dalam permintaan API tidak valid.

  3. Jika Adaptor Apigee untuk log Envoy berisi entri log dengan [permission denied] di bagian Authenticate error , hal ini menunjukkan bahwa Kunci API yang diteruskan sebagai bagian dari permintaan tidak valid dan merupakan penyebab masalah. Jika tidak, buka Penyebab: Adaptor Apigee untuk Envoy tidak dapat berkomunikasi dengan proxy API layanan jarak jauh.

Resolusi

Jika pesan [permission denied] diamati di bagian Authenticate error di log Adaptor Apigee untuk Envoy, lakukan langkah-langkah berikut untuk mengatasi masalah ini:

  1. Periksa kunci API yang dikirim dalam permintaan API terhadap nilai kunci API yang ditemukan di aplikasi yang terhubung ke produk API.
  2. Jika kunci API yang digunakan oleh klien tidak valid, minta klien untuk mengirim Kunci API yang valid.
  3. Jika kunci API yang digunakan oleh klien valid dan jika Anda masih melihat permintaan Error 403, hubungi Dukungan Apigee Edge untuk menyelidiki masalah ini lebih lanjut.

Penyebab: Adaptor Apigee untuk Envoy tidak dapat berkomunikasi dengan proxy API layanan jarak jauh

Error ini akan terjadi jika Adaptor Apigee untuk Envoy tidak dapat berkomunikasi dengan remote Proxy API layanan jika host layanan jarak jauh yang dikonfigurasi tidak valid.

Diagnosis

Lakukan langkah-langkah berikut untuk mendiagnosis masalah:

  1. Aktifkan log debug seperti yang dijelaskan pada langkah 2 di atas.
  2. Periksa log Adaptor Apigee untuk Envoy dan pastikan Anda melihat pesan berikut:

    Error retrieving products: REQUEST_URI: no such host
    

    Contoh Output Log Debug:

    2021-01-12T08:29:06.499Z        DEBUG   product/manager.go:188  retrieving products from: https://foo/remote-service/products
    2021-01-12T08:29:06.505Z        ERROR   product/manager.go:164  Error retrieving products: GET "https://foo/remote-service/pro
    ducts": dial tcp: lookup foo on 169.254.169.254:53: no such host
    github.com/apigee/apigee-remote-service-golib/product.(*manager).start.func1
            /go/pkg/mod/github.com/apigee/apigee-remote-service-golib@v1.4.0/product/manager.go:164
    github.com/apigee/apigee-remote-service-golib/util.(*Looper).Run
            /go/pkg/mod/github.com/apigee/apigee-remote-service-golib@v1.4.0/util/looper.go:87
    github.com/apigee/apigee-remote-service-golib/util.(*Looper).Start.func1
            /go/pkg/mod/github.com/apigee/apigee-remote-service-golib@v1.4.0/util/looper.go:59
    

    Dalam contoh ini, Adaptor Apigee untuk Envoy tidak dapat berkomunikasi dengan proxy API layanan jarak jauh karena nama host yang disediakan dalam Proxy API server jarak jauh URL tidak valid seperti yang ditunjukkan oleh error no such host .

  3. Jika Adaptor Apigee untuk log Envoy berisi entri log dengan pesan no such host, maka ini adalah penyebab masalah. Jika tidak, buka Penyebab: Proxy Envoy tidak dapat berkomunikasi dengan Adaptor Apigee untuk Envoy.

Resolusi

Jika error di atas ditampilkan di log Adaptor Apigee untuk Envoy, lakukan hal berikut langkah-langkah untuk mengatasi masalah tersebut:

  1. Periksa file konfigurasi Adaptor Apigee untuk Envoy dan pastikan URL proxy API layanan jarak jauh valid.

    Jika tidak, hentikan Adaptor Apigee untuk Envoy, perbaiki URL proxy API layanan jarak jauh di file konfigurasi umum, jalankan Adaptor Apigee untuk Envoy, lalu kirim permintaan API lainnya memverifikasi perbaikannya.

    Contoh konfigurasi:

    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: apigee-remote-service-envoy
      namespace: apigee
    data:
      config.yaml: |
        tenant:
          internal_api: https://istioservices.apigee.net/edgemicro
          remote_service_api: https://ORG-ENV.apigee.net/remote-service
          org_name: ORG
          env_name: ENV
          key: KEY
          secret: SECRET
          
  2. Verifikasi bahwa proxy API remote-service di-deploy di Edge yang relevan lingkungan fleksibel App Engine. Jika tidak, deploy proxy remote-service API di Edge yang relevan lalu coba lagi.
  3. Verifikasi konektivitas jaringan antara Adaptor Apigee untuk Envoy dan Endpoint proxy API remote-service. Jika ada konektivitas jaringan ditemukan, hubungi tim jaringan Anda dan coba selesaikan masalahnya.

Penyebab: Proxy Envoy tidak dapat berkomunikasi dengan Adaptor Apigee untuk Envoy

Diagnosis

Lakukan langkah-langkah berikut untuk mendiagnosis masalah:

  1. Pastikan Anda telah mengaktifkan log debug di Envoy. Jika tidak, hentikan Envoy dan mulai lagi, mengaktifkan log debug. Kemudian, kirim permintaan API lain.

    Deployment mandiri:

    envoy -c envoy-config.yaml -l debug
    

    Deployment berbasis Kubernetes/Istio:

    kubectl -n=istio-system get pods
    kubectl -n=istio-system exec -it INGRESS_GATEWAY_NAME bash -- curl -X POST localhost:15000/logging?connection=debug
    
  2. Periksa log Adaptor Apigee untuk Envoy dan pastikan ada entri log dengan pesan tersebut:
    connecting to APIGEE_ENVOY_ADAPTER_HOST:5000
    

    yang kemudian diikuti oleh:

    upstream connect error or disconnect/reset before headers. reset reason: ACTUAL_REASON
    

    Contoh Output Log Debug:

    [2021-03-23 05:44:41.867][1303661][debug][connection] [external/envoy/source/common/network/connection_impl.cc:769] [C4] connecting to 127.0.0.1:5000
    [2021-03-23 05:44:41.867][1303661][debug][connection] [external/envoy/source/common/network/connection_impl.cc:785] [C4] connection in progress
    [2021-03-23 05:44:41.868][1303661][debug][http2] [external/envoy/source/common/http/http2/codec_impl.cc:1173] [C4] updating connection-level initial window size to 268435456
    [2021-03-23 05:44:41.869][1303661][debug][connection] [external/envoy/source/common/network/connection_impl.cc:634] [C4] delayed connection error: 111
    [2021-03-23 05:44:41.869][1303661][debug][connection] [external/envoy/source/common/network/connection_impl.cc:203] [C4] closing socket: 0
    [2021-03-23 05:44:41.869][1303661][debug][client] [external/envoy/source/common/http/codec_client.cc:96] [C4] disconnect. resetting 0 pending requests
    [2021-03-23 05:44:41.869][1303661][debug][pool] [external/envoy/source/common/conn_pool/conn_pool_base.cc:314] [C4] client disconnected, failure reason:
    [2021-03-23 05:44:41.869][1303661][debug][router] [external/envoy/source/common/router/router.cc:1031] [C0][S6149963213555558594] upstream reset: reset reason: connection failure, transport failure reason:
    [2021-03-23 05:44:41.869][1303661][debug][http] [external/envoy/source/common/http/async_client_impl.cc:100] async http request response headers (end_stream=true):
    ':status', '200'
    'content-type', 'application/grpc'
    'grpc-status', '14'
    'grpc-message', 'upstream connect error or disconnect/reset before headers. reset reason: connection failure'

    Contoh di atas menunjukkan bahwa Envoy tidak dapat berkomunikasi dengan Adaptor Apigee untuk Envoy karena alasan connection failure.

  3. connection failure dapat disebabkan oleh beberapa alasan. Mari kita lihat masing-masing skenario.

Skenario #1: Proses adaptor tidak berjalan

Jika proses Adaptor Apigee untuk Envoy tidak berjalan, error ini dapat terjadi.

  1. Pastikan proses Adaptor Apigee untuk Envoy berjalan dengan menjalankan perintah berikut perintah. Jika proses Adaptor Apigee untuk Envoy berjalan, hasil dari hal berikut Anda harus mencantumkannya.
    ps -ef | grep apigee-remote-service-envoy
    
  2. Jika tidak berjalan, maka itulah penyebab masalah.

Resolusi

  1. Jika proses Adaptor Apigee untuk Envoy tidak berjalan, mulai Adaptor Apigee untuk Envoy.
  2. Buat permintaan API lain dan verifikasi apakah masalah telah diperbaiki.

Skenario #2: Proses adaptor tidak memproses port tertentu

Jika proses Adaptor Apigee untuk Envoy tidak memproses port tertentu, maka kesalahan ini dapat terjadi.

Jika proses Adaptor Apigee untuk Envoy sedang berjalan, pastikan ada soket yang mendengarkan port 5000: APIGEE_ENVOY_ADAPTER_HOST:5000. Anda dapat menjalankan Perintah netstat untuk memverifikasi ini:

sudo netstat -lnp | grep 5000

Contoh output:

sudo netstat -lnp | grep 5000

tcp6       0      0 :::5000                 :::*                    LISTEN      1596530/./apigee-re

Tidak ada soket yang memproses port 5000, mungkin itulah penyebab masalah ini.

Resolusi

  1. Hentikan Adaptor Apigee untuk Envoy, lalu mulai lagi.
  2. Buat permintaan API lain dan verifikasi apakah masalah telah diperbaiki.

Skenario #3: Konektivitas Jaringan antara Envoy dan Adaptor Apigee untuk Envoy

  1. Verifikasi konektivitas jaringan antara Envoy dan Adaptor Apigee untuk Envoy:
    ssh $ENVOY_HOST
    telnet $APIGEE_ENVOY_ADAPTER_HOST 5000

    Apakah telnet dapat membuat koneksi TCP ke Adaptor Apigee untuk Envoy output yang mirip dengan berikut akan ditampilkan:

    telnet $APIGEE_ENVOY_ADAPTER_HOST 5000
    
    Trying ::1...
    Connected to localhost.
    Escape character is '^]'.
    
  2. Jika Anda mengamati error Connection timed out pada telnet, berarti hal tersebut menunjukkan ada masalah konektivitas jaringan antara Envoy dan Adaptor Apigee untuk Envoy.

Resolusi

Jika Anda melihat masalah konektivitas jaringan antara Envoy dan Adaptor Apigee untuk Envoy, harap melibatkan tim jaringan Anda dan mencoba menyelesaikan masalah.

Jika masalah masih berlanjut, buka Harus mengumpulkan informasi diagnostik.

Harus mengumpulkan informasi diagnostik

Jika masalah berlanjut setelah mengikuti petunjuk di atas, kumpulkan diagnostik berikut informasi, lalu hubungi Dukungan Apigee Edge:

  1. Produk Apigee yang digunakan:

    Contoh: Apigee Edge Cloud, Apigee OPDK, Apigee Hybrid, Apigee X

  2. Organisasi dan lingkungan Apigee
  3. Baca definisi produk API menggunakan Edge API:

    curl -i -u $USER:$PASSWORD $MANAGEMENT_SERVER_ENDPOINT/v1/organizations/$ORGANIZATION/apiproducts/$API_PRODUCT

    Referensi: Apigee Edge API

  4. Mulai sesi rekaman aktivitas di proxy API remote-service menggunakan UI Apigee Edge. Munculkan kembali masalah ini dan bagikan file XML sesi Trace.

    Referensi: Menggunakan alat Trace | Apigee Edge

  5. Adaptor Apigee untuk Log Envoy (lengkap log yang terkait dengan jangka waktu tertentu)

    Deployment mandiri:

    # by default Apigee Envoy write logs to stdout and stderr, check your deployment configuration and collect logs accordingly
    

    Deployment berbasis Kubernetes/Istio:

    kubectl -n=apigee get pods
    kubectl -n=apigee logs APIGEE_REMOTE_SERVICE_ENVOY_POD_NAME > apigee-remote-service-envoy.log
  6. Permintaan API yang dikirim ke proxy Envoy menggunakan perintah curl (output lengkap dari perintah curl):
    curl -v ENVOY_PROXY_ENDPOINT
  7. Permintaan API yang dikirim ke layanan target menggunakan perintah curl (permintaan output perintah curl):
    curl -v TARGET_SERVICE_ENDPOINT