Anda sedang melihat dokumentasi Apigee Edge.
Buka
dokumentasi Apigee X. info
Gejala
Envoy Proxy gagal dengan error 403 Forbidden
HTTP saat dipanggil melalui Apigee Adapter for 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 yang berlaku untuk |
---|---|---|
Produk API tidak diaktifkan | Produk API tidak diaktifkan untuk lingkungan tertentu. | Pengguna Edge Publik dan Private Cloud |
Jalur URI layanan target tidak ada di Produk API | Jalur URI layanan target tidak ada atau tidak ditambahkan ke produk API di bagian resource API. | Pengguna Edge Publik dan Private Cloud |
Nama host di Produk API tidak ada | Nama host yang diberikan dalam permintaan API klien tidak ada dalam produk API pada target layanan jarak jauh Apigee. | Pengguna Edge Publik dan Private Cloud |
Tidak ada kunci API di header permintaan | Kunci API tidak diteruskan di header HTTP x-api-key . |
Pengguna Edge Publik dan Private Cloud |
Kunci API tidak valid | Kunci API yang diteruskan sebagai bagian dari permintaan tidak valid. | Pengguna Edge Publik 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 Publik 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 Publik dan Private Cloud |
Sebelum memulai
- Pastikan 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
Aktifkan log debug:
Pastikan Anda telah mengaktifkan log debug di Adaptor Apigee untuk Envoy guna menangkap detail selengkapnya tentang error tersebut. Jika tidak, hentikan Apigee Adapter untuk Envoy dan 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:
- Aktifkan log debug seperti yang dijelaskan pada langkah 2 di atas.
- Periksa Adaptor Apigee untuk log 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 Apigee Adapter untuk Envoy.Untuk mengetahui informasi selengkapnya tentang Adaptor Apigee untuk logging Envoy, lihat Logging.
- Jika Anda melihat pesan ini saat melakukan otorisasi permintaan API, kemungkinan besar ini menunjukkan bahwa Produk API tertentu tidak diaktifkan untuk lingkungan tertentu tempat Anda melakukan panggilan API.
- Lakukan langkah-langkah berikut untuk memverifikasi hal ini:
- Login ke Edge UI.
- Di halaman Publish > API products, klik produk API tertentu yang Anda gunakan untuk mengonfigurasi Apigee Adapter untuk Envoy.
- Pastikan lingkungan spesifik tempat Anda membuat permintaan API telah diaktifkan dalam produk API.
- Jika lingkungan spesifik tidak diaktifkan di Produk API, berarti itulah penyebab masalah ini.
- Jika lingkungan tertentu sudah diaktifkan, buka Penyebab: Jalur URI layanan target tidak ada di Produk API.
Resolusi
Jika lingkungan spesifik tidak diaktifkan di produk API, lakukan langkah-langkah berikut untuk menyelesaikan masalah:
- Login ke Edge UI.
- Di halaman Publish > API products, klik produk API tertentu yang Anda gunakan untuk mengonfigurasi Apigee Adapter untuk Envoy.
- Di halaman Produk API > Nama produk, klik Edit.
- Aktifkan lingkungan tertentu tempat Anda ingin membuat permintaan API, dengan memilih kotak centang lingkungan yang relevan.
- Klik Simpan.
Penyebab: Jalur URI layanan target tidak ada dalam produk API
Error ini akan terjadi jika jalur URI target tidak ditentukan dalam Produk API tertentu yang digunakan oleh Envoy Proxy.
Diagnosis
Lakukan langkah-langkah berikut untuk mendiagnosis masalah:
- Aktifkan log debug seperti yang dijelaskan pada langkah 2 di atas.
-
Periksa Adaptor Apigee untuk log 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
Ini menunjukkan bahwa jalur
/echo1
tidak ditemukan dalam produk APIENVOY-PRODUCT-1
. - Jika Anda melihat pesan
no path: REQUEST_URI_PATH
di Adaptor Apigee untuk log debug Envoy, berarti 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, lakukan langkah-langkah berikut untuk menyelesaikan masalah tersebut:
- Login ke Edge UI.
- Di halaman Publish > API products, klik produk API tertentu yang Anda gunakan untuk mengonfigurasi Apigee Adapter untuk Envoy.
- Di halaman Produk API > Nama produk, klik Edit.
- Di panel API resources, tambahkan URI permintaan API ke produk API.
- Pantau Adaptor Apigee untuk log Envoy dan tunggu hingga Apigee Adapter untuk Envoy mengambil produk API yang telah diupdate. Setelah itu, kirim permintaan API lain untuk memverifikasi perbaikan.
Penyebab: Nama host tidak ada di produk API
Error ini akan terjadi jika kombinasi nama host dan port target tidak ditambahkan ke Produk API tertentu yang digunakan oleh Envoy Proxy.
Diagnosis
Lakukan langkah-langkah berikut untuk mendiagnosis masalah:
- Aktifkan log debug seperti yang dijelaskan pada langkah 2 di atas.
Periksa Adaptor Apigee untuk log 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 APIENVOY-PRODUCT-1
.- Jika Apigee Adapter untuk log Envoy berisi entri dengan pesan
no targets: HOSTNAME:PORT
saat memberi otorisasi permintaan, berarti inilah penyebab masalah tersebut. Jika tidak, buka Cause: Missing API key in the request header.
Resolusi
Jika kombinasi nama host dan port target tidak ditambahkan ke produk API, lakukan langkah-langkah berikut untuk menyelesaikan masalah tersebut:
- Login ke Edge UI.
- Di halaman Publish > API products, klik produk API tertentu yang Anda gunakan untuk mengonfigurasi Apigee Adapter untuk Envoy.
- Di halaman Produk API > Nama produk, klik Edit.
Di panel Apigee remote service targets, tambahkan port dan nama host target, lalu klik Save.
Jika Anda tidak melihat bagian Target layanan jarak jauh Apigee di UI, tambahkan 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": [] }
- Setelah tugas di atas selesai, pantau Apigee Adapter untuk log Envoy dan tunggu hingga Apigee Adapter untuk Envoy mengambil produk API yang telah diupdate. Setelah itu, kirim permintaan API lain untuk memverifikasi perbaikan.
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:
- Aktifkan log debug seperti yang dijelaskan pada langkah 2 di atas.
- Periksa Adaptor Apigee untuk log Envoy dan pastikan Anda melihat pesan
[missing authentication]
di bagianAuthenticate error
.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. - Jika Adaptor Apigee untuk log Envoy berisi entri log dengan pesan
[missing authentication]
di bagianAuthenticate error
, berarti inilah 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 tersebut:
- Periksa apakah klien telah mengirim kunci API menggunakan header HTTP
x-api-key
dalam permintaan API. Jika tidak, minta klien untuk mengirim kunci API di header HTTPx-api-key
. - Periksa Adaptor Apigee untuk file konfigurasi Envoy dan pastikan nama header kunci API default
x-api-key
telah diubah, sebagai contoh:apiVersion: v1 kind: ConfigMap metadata: name: apigee-remote-service-envoy namespace: apigee data: config.yaml: | global: tls: ... tenant: ... auth: target_header: api-key
Pada contoh di atas, nama header Kunci API default telah diubah menjadi
api-key
. Dalam hal ini, Anda harus meneruskan Kunci API sebagai bagian dari headerapi-key
. - Jika nama header kunci API default telah diubah, minta klien menggunakan nama header kunci API yang telah diupdate, lalu kirim permintaan API lain dan verifikasi apakah hal tersebut dapat menyelesaikan masalah.
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:
- Aktifkan log debug seperti yang dijelaskan pada langkah 2 di atas.
- Periksa Adaptor Apigee untuk log Envoy dan pastikan Anda melihat pesan
[permission denied]
di bagianAuthenticate error
. Hal ini biasanya ditampilkan setelah Kunci API diambil oleh Adaptor, yang ditunjukkan oleh pesanfetchToken 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.
- Jika Adaptor Apigee untuk log Envoy berisi entri log dengan
[permission denied]
di bagianAuthenticate error
, berarti Kunci API yang diteruskan sebagai bagian dari permintaan tidak valid dan merupakan penyebab masalahnya. Jika tidak, buka Penyebab: Apigee Adapter untuk Envoy tidak dapat berkomunikasi dengan proxy API layanan jarak jauh.
Resolusi
Jika pesan [permission denied]
diamati di bagian Authenticate
error
di Adaptor Apigee untuk log Envoy, lakukan langkah-langkah berikut untuk menyelesaikan masalah:
- Periksa kunci API yang dikirim dalam permintaan API berdasarkan nilai kunci API yang ditemukan dalam aplikasi yang terhubung ke produk API.
- Jika kunci API yang digunakan oleh klien tidak valid, minta klien untuk mengirim Kunci API yang valid.
- Jika kunci API yang digunakan oleh klien valid dan Anda masih melihat error HTTP
403
, hubungi Dukungan Apigee Edge untuk menyelidiki hal ini lebih lanjut.
Penyebab: Adaptor Apigee untuk Envoy tidak dapat berkomunikasi dengan proxy API layanan jarak jauh
Error ini akan terjadi jika Apigee Adapter untuk Envoy tidak dapat berkomunikasi dengan Proxy API layanan jarak jauh jika host layanan jarak jauh yang dikonfigurasi tidak valid.
Diagnosis
Lakukan langkah-langkah berikut untuk mendiagnosis masalah:
- Aktifkan log debug seperti yang dijelaskan pada langkah 2 di atas.
-
Periksa Apigee Adapter untuk log 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, Apigee Adapter untuk Envoy tidak dapat berkomunikasi dengan proxy API layanan jarak jauh karena nama host yang diberikan dalam URL Proxy API server jarak jauh tidak valid, sebagaimana ditunjukkan oleh error
no such host
. - Jika Adaptor Apigee untuk log Envoy berisi entri log dengan pesan
no such host
, berarti inilah penyebab masalah tersebut. Jika tidak, buka Penyebab: Proxy Envoy tidak dapat berkomunikasi dengan Apigee Adapter untuk Envoy.
Resolusi
Jika error di atas ditampilkan di Adaptor Apigee untuk log Envoy, lakukan langkah-langkah berikut untuk menyelesaikan masalah tersebut:
Periksa Adaptor Apigee untuk file konfigurasi Envoy dan verifikasi bahwa URL proxy API layanan jarak jauh yang diberikan valid.
Jika tidak, hentikan Apigee Adapter untuk Envoy, perbaiki URL proxy API layanan jarak jauh di file konfigurasi, mulai Apigee Adapter untuk Envoy, lalu kirim permintaan API lain dan verifikasi perbaikan.
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
- Verifikasi bahwa proxy
remote-service
API di-deploy di lingkungan Edge yang relevan. Jika tidak, deploy proxyremote-service
API di lingkungan Edge yang relevan dan coba lagi. - Verifikasi konektivitas jaringan antara Apigee Adapter for Envoy dan endpoint proxy
remote-service
API. Jika ada masalah konektivitas jaringan yang 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:
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
- Periksa Adaptor Apigee untuk log Envoy dan pastikan ada entri log dengan pesan:
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
. 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.
- Pastikan proses Adaptor Apigee untuk Envoy berjalan dengan menjalankan perintah berikut. Jika proses Adaptor Apigee untuk Envoy sedang berjalan, hasil dari perintah berikut akan mencantumkannya.
ps -ef | grep apigee-remote-service-envoy
- Jika tidak berjalan, berarti itulah penyebab masalahnya.
Resolusi
- Jika proses Adaptor Apigee untuk Envoy tidak berjalan, mulai Adaptor Apigee untuk Envoy.
- 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, error ini dapat terjadi.
Jika proses Adaptor Apigee untuk Envoy sedang berjalan, pastikan ada soket yang memproses port 5000: APIGEE_ENVOY_ADAPTER_HOST:5000
. Anda dapat menjalankan perintah netstat
untuk memverifikasi hal ini:
sudo netstat -lnp | grep 5000
Contoh output:
sudo netstat -lnp | grep 5000 tcp6 0 0 :::5000 :::* LISTEN 1596530/./apigee-re
Jika tidak ada soket yang mendengar di port 5000, hal itu mungkin menjadi penyebab masalah ini.
Resolusi
- Hentikan Adaptor Apigee untuk Envoy dan mulai lagi.
- Buat permintaan API lain dan verifikasi apakah masalah telah diperbaiki.
Skenario #3: Konektivitas Jaringan antara Envoy dan Adaptor Apigee untuk Envoy
- Verifikasi konektivitas jaringan antara Envoy dan Apigee Adapter untuk Envoy:
ssh $ENVOY_HOST telnet $APIGEE_ENVOY_ADAPTER_HOST 5000
Jika telnet dapat membuat koneksi TCP ke Apigee Adapter untuk Envoy, output yang serupa dengan berikut akan ditampilkan:
telnet $APIGEE_ENVOY_ADAPTER_HOST 5000 Trying ::1... Connected to localhost. Escape character is '^]'.
- Jika Anda mengamati error
Connection timed out
pada telnet, maka hal itu menunjukkan ada masalah konektivitas jaringan antara Envoy dan Apigee Adapter untuk Envoy.
Resolusi
Jika Anda melihat masalah konektivitas jaringan antara Envoy dan Apigee Adapter untuk Envoy, hubungi tim jaringan Anda dan coba selesaikan masalah tersebut.
Jika masalah masih berlanjut, buka Harus mengumpulkan informasi diagnostik.
Harus mengumpulkan informasi diagnostik
Jika masalah berlanjut setelah mengikuti petunjuk di atas, kumpulkan informasi diagnostik berikut, lalu hubungi Dukungan Apigee Edge:
-
Produk Apigee yang digunakan:
Contoh: Apigee Edge Cloud, Apigee OPDK, Apigee Hybrid, Apigee X
- Organisasi dan lingkungan Apigee
Definisi produk API dibaca menggunakan Edge API:
curl -i -u $USER:$PASSWORD $MANAGEMENT_SERVER_ENDPOINT/v1/organizations/$ORGANIZATION/apiproducts/$API_PRODUCT
Referensi: Apigee Edge API
Mulai sesi perekaman aktivitas di proxy API
remote-service
menggunakan UI Apigee Edge. Reproduksi masalah ini dan bagikan file XML sesi Trace.Referensi: Menggunakan alat Trace | Apigee Edge
Adaptor Apigee untuk log Envoy (log lengkap 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
- Permintaan API yang dikirim ke proxy Envoy menggunakan perintah
curl
(output lengkap dari perintahcurl
):curl -v ENVOY_PROXY_ENDPOINT
- Permintaan API yang dikirim ke layanan target menggunakan perintah
curl
(output lengkap dari perintahcurl
):curl -v TARGET_SERVICE_ENDPOINT