Apigee Edge belgelerini görüntülüyorsunuz.
Apigee X belgelerine gidin. bilgi
Belirti
Envoy Proxy, Apigee Adapter for Envoy üzerinden çağrıldığında HTTP 403 Forbidden hatasıyla başarısız oluyor.
Hata mesajı
Aşağıdaki hata mesajı gösterilir:
HTTP/1.1 403 Forbidden content-length: 19 content-type: text/plain date: Tue, 03 Nov 2020 00:20:10 GMT server: istio-envoy
Olası nedenler
Aşağıdaki koşullardan biri gerçekleşirse Envoy proxy'si bir HTTP 403 hatası oluşturur:
| Neden | Açıklama | Aşağıdaki ürünler için geçerli sorun giderme talimatları |
|---|---|---|
| API ürünü etkin değil | API ürünü, belirli bir ortam için etkinleştirilmemiş. | Edge Public ve Private Cloud kullanıcıları |
| API ürününde hedef hizmet URI yolu eksik | Hedef hizmetin URI yolu eksik veya API kaynakları bölümündeki API ürününe eklenmemiş. | Edge Public ve Private Cloud kullanıcıları |
| API ürününde ana makine adı eksik | İstemci API isteğinde verilen ana makine adı, Apigee uzaktan hizmet hedefleri altındaki API ürününde eksik. | Edge Public ve Private Cloud kullanıcıları |
| İstek başlığında API anahtarı eksik | API anahtarı, x-api-key HTTP başlığında iletilmiyor. |
Edge Public ve Private Cloud kullanıcıları |
| Geçersiz API anahtarı | İstekle birlikte iletilen API anahtarı geçersiz. | Edge Public ve Private Cloud kullanıcıları |
| Apigee Adapter for Envoy, remote-service API proxy'siyle iletişim kuramıyor | Apigee Adapter for Envoy, uzak hizmet API proxy'siyle iletişim kuramıyor. | Edge Public ve Private Cloud kullanıcıları |
| Envoy proxy, Apigee Adapter for Envoy ile iletişim kuramıyor | Envoy proxy, Apigee Adapter for Envoy ile iletişim kuramıyor | Edge Public ve Private Cloud kullanıcıları |
Başlamadan önce
- Envoy proxy'sinden
403 Forbiddenyanıt mesajını aldığınızı doğrulayın. Örneğin: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
Hata ayıklama günlüklerini etkinleştirin:
Hatayla ilgili daha fazla ayrıntı yakalamak için Apigee Adapter for Envoy'da hata ayıklama günlüklerini etkinleştirdiğinizden emin olun. Aksi takdirde, aşağıdaki komutu kullanarak hata ayıklama günlüklerini etkinleştirerek Envoy için Apigee Adaptörü'nü durdurun ve yeniden başlatın:
apigee-remote-service-envoy -c config.yaml -l debug
Neden: API ürünü etkin değil
Bu hata, Envoy Proxy tarafından kullanılan belirli API ürünü, API çağrılarının yapıldığı belirli ortamda etkinleştirilmemişse oluşur.
Teşhis
Sorunu teşhis etmek için aşağıdaki adımları uygulayın:
- Yukarıdaki 2. adımda açıklandığı şekilde hata ayıklama günlüklerini etkinleştirin.
- Apigee Adapter for Envoy günlüklerini kontrol edin ve
Authorizing requestbölümünde aşağıdaki mesajın gösterildiğini doğrulayın:product: API_PRODUCT_NAME not found
Örnek hata ayıklama günlüğü çıkışı:
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
Yukarıdaki örnekte,
ENVOY-PRODUCT-1API ürününün Apigee Adapter for Envoy'da bulunamadığı gösterilmektedir.Envoy için Apigee Adaptörü'nün günlüğe kaydetme özelliği hakkında daha fazla bilgi için Günlüğe kaydetme başlıklı makaleyi inceleyin.
- API isteğini yetkilendirirken bu mesajı görüyorsanız büyük olasılıkla söz konusu API ürünü, API çağrılarını yaptığınız belirli bir ortam için etkinleştirilmemiştir.
- Bunu doğrulamak için aşağıdaki adımları uygulayın:
- Edge kullanıcı arayüzüne giriş yapın.
- Yayınla > API ürünleri sayfasında, Apigee Adapter for Envoy'i yapılandırmak için kullandığınız API ürününü tıklayın.
- API isteklerini gönderdiğiniz ortamın API ürününde etkinleştirildiğini doğrulayın.
- API ürününde belirli bir ortam etkinleştirilmemişse bu sorunun nedeni budur.
- Belirli bir ortam zaten etkinleştirilmişse Neden: API ürününde hedef hizmet URI yolu eksik bölümüne gidin.
Çözünürlük
Belirli bir ortam API ürününde etkinleştirilmemişse sorunu çözmek için aşağıdaki adımları uygulayın:
- Edge kullanıcı arayüzüne giriş yapın.
- Yayınla > API ürünleri sayfasında, Apigee Adapter for Envoy'i yapılandırmak için kullandığınız API ürününü tıklayın.
- API ürünleri > Ürün adı sayfasında Düzenle'yi tıklayın.
- İlgili ortam onay kutusunu işaretleyerek API istekleri göndermek istediğiniz ortamı etkinleştirin.
- Kaydet'i tıklayın.
Neden: API ürününde hedef hizmet URI yolu eksik
Bu hata, Envoy Proxy tarafından kullanılan belirli API ürünlerinde hedefin URI yolu belirtilmediğinde oluşur.
Teşhis
Sorunu teşhis etmek için aşağıdaki adımları uygulayın:
- Yukarıdaki 2. adımda açıklandığı şekilde hata ayıklama günlüklerini etkinleştirin.
-
Envoy için Apigee Adaptörü günlüklerini kontrol edin ve
Authorizing requestbölümünde belirli bir hedefle ilişkili API ürünü için aşağıdaki mesajın gösterildiğini doğrulayın:no path: REQUEST_URI_PATH
Örnek hata ayıklama günlüğü çıkışı:
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)
Örnek çıktıda şu mesaj gösteriliyor:
no path: /echo1
Bu,
/echo1yolununENVOY-PRODUCT-1API ürününde bulunamadığını gösterir. - Apigee Adapter for Envoy hata ayıklama günlüklerinde
no path: REQUEST_URI_PATHmesajını görüyorsanız bu sorunun nedeni budur. Eşleşmiyorsa şu bölüme gidin: Neden: API ürününde ana makine adı eksik.
Çözünürlük
Belirli bir istek URI'si, belirli bir hedef için API ürününe eklenmemişse sorunu çözmek için aşağıdaki adımları uygulayın:
- Edge kullanıcı arayüzüne giriş yapın.
- Yayınla > API ürünleri sayfasında, Apigee Adapter for Envoy'i yapılandırmak için kullandığınız API ürününü tıklayın.
- API ürünleri > Ürün adı sayfasında Düzenle'yi tıklayın.
- API kaynakları bölmesinde, API isteği URI'sini API ürününe ekleyin.
- Apigee Adapter for Envoy günlüklerini izleyin ve Apigee Adapter for Envoy'un güncellenen API ürününü getirmesini bekleyin. Ardından, düzeltmeyi doğrulamak için başka bir API isteği gönderin.
Neden: API ürününde ana makine adı eksik
Bu hata, hedef ana makine adı ve bağlantı noktası kombinasyonu Envoy Proxy tarafından kullanılan belirli API ürününe eklenmemişse oluşur.
Teşhis
Sorunu teşhis etmek için aşağıdaki adımları uygulayın:
- Yukarıdaki 2. adımda açıklandığı şekilde hata ayıklama günlüklerini etkinleştirin.
Envoy için Apigee Adaptörü günlüklerini kontrol edin ve
Authorizing requestbölümünde belirli bir hedefle ilişkili API ürünü için aşağıdaki mesajın gösterildiğini doğrulayın:no targets: HOSTNAME:PORT
Örnek hata ayıklama günlüğü çıkışı:
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)
Yukarıdaki örnekte, ana makine adı ve bağlantı noktası kombinasyonunun
httpbin1:8080API ürünündeENVOY-PRODUCT-1bulunamadığı gösterilmektedir.- Apigee Adapter for Envoy günlükleri, isteği yetkilendirirken
no targets: HOSTNAME:PORTmesajını içeren bir giriş içeriyorsa sorunun nedeni budur. Aksi takdirde, Neden: İstek başlığında API anahtarı eksik bölümüne gidin.
Çözünürlük
Hedef ana makine adı ve bağlantı noktası kombinasyonu API ürününe eklenmemişse sorunu çözmek için aşağıdaki adımları uygulayın:
- Edge kullanıcı arayüzüne giriş yapın.
- Yayınla > API ürünleri sayfasında, Apigee Adapter for Envoy'i yapılandırmak için kullandığınız API ürününü tıklayın.
- API ürünleri > Ürün adı sayfasında Düzenle'yi tıklayın.
Apigee uzak hizmet hedefleri bölmesinde, hedef ana makine adını ve bağlantı noktasını ekleyip Kaydet'i tıklayın.
Kullanıcı arayüzünde Apigee uzak hizmet hedefleri bölümünü görmüyorsanız Edge API'yi kullanarak API ürününe
apigee-remote-service-targetsadlı bir özel özellik ekleyin ve HOSTNAME:PORT değerini ekleyin. Örneğin: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": [] }- Yukarıdaki görev tamamlandıktan sonra Apigee Adapter for Envoy günlüklerini izleyin ve Apigee Adapter for Envoy'un güncellenmiş API ürününü getirmesini bekleyin. Ardından, düzeltmeyi doğrulamak için başka bir API isteği gönderin.
Neden: İstek başlığında API anahtarı eksik
API anahtarı, istek başlıklarının bir parçası olarak iletilmezse bu hata oluşur.
Teşhis
Sorunu teşhis etmek için aşağıdaki adımları uygulayın:
- Yukarıdaki 2. adımda açıklandığı şekilde hata ayıklama günlüklerini etkinleştirin.
- Apigee Adapter for Envoy günlüklerini kontrol edin ve
[missing authentication]mesajınınAuthenticate errorbölümünde göründüğünü doğrulayın.Örnek hata ayıklama günlüğü çıkışı:
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
Yukarıda gösterilen örnek çıktıda
[missing authentication]mesajı yer alıyor. Bu mesaj, API anahtarının istek başlığının bir parçası olarak iletilmediğini gösterir. - Apigee Adapter for Envoy günlükleri,
[missing authentication]mesajını içeren bir günlük girişi içeriyorsaAuthenticate errorbölümünde bu, sorunun nedenidir. Aksi takdirde, Neden: Geçersiz API anahtarı bölümüne gidin.
Çözünürlük
Apigee Adapter for Envoy günlüklerinde [missing authentication] hatası gösteriliyorsa sorunu çözmek için aşağıdaki adımları uygulayın:
- İstemcinin, API isteğinde
x-api-keyHTTP başlığını kullanarak API anahtarını gönderip göndermediğini kontrol edin. Aksi takdirde, istemciden API anahtarını HTTP başlığındax-api-keygöndermesini isteyin. - Envoy için Apigee bağdaştırıcısının yapılandırma dosyasını kontrol edin ve varsayılan API anahtarı
başlık adının
x-api-keydeğiştirildiğini doğrulayın. Örneğin:apiVersion: v1 kind: ConfigMap metadata: name: apigee-remote-service-envoy namespace: apigee data: config.yaml: | global: tls: ... tenant: ... auth: target_header: api-keyYukarıdaki örnekte, varsayılan API anahtarı başlık adı
api-keyolarak değiştirilmiştir. Bu durumda, API anahtarını üstbilginin bir parçası olarak iletmeniz gerekirapi-key. - Varsayılan API anahtarı başlık adı değiştirildiyse istemciden güncellenmiş API anahtarı başlık adını kullanmasını ve başka bir API isteği göndermesini isteyin. Ardından, sorunun çözülüp çözülmediğini doğrulayın.
Neden: Geçersiz API anahtarı
İstek başlığının bir parçası olarak geçersiz API anahtarı iletilirse bu hata oluşur.
Teşhis
Sorunu teşhis etmek için aşağıdaki adımları uygulayın:
- Yukarıdaki 2. adımda açıklandığı şekilde hata ayıklama günlüklerini etkinleştirin.
- Apigee Adapter for Envoy günlüklerini kontrol edin ve
[permission denied]bölümündeAuthenticate errormesajını gördüğünüzü doğrulayın. Bu genellikle,fetchToken fetching: API_KEYmesajıyla belirtilen bağdaştırıcı tarafından API anahtarı alındıktan sonra gösterilir.Örnek hata ayıklama günlüğü çıkışı:
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)
Bu örnekte, API isteğinde gönderilen API anahtarı geçerli değildi.
- Envoy için Apigee Adaptörü günlükleri,
[permission denied]bölümündeAuthenticate erroriçeren bir günlük girişi içeriyorsa bu, istek kapsamında iletilen API anahtarının geçersiz olduğunu ve sorunun nedeni olduğunu gösterir. Aksi takdirde, Neden: Apigee Adapter for Envoy, uzak hizmet API proxy'si ile iletişim kuramıyor bölümüne gidin.
Çözünürlük
Envoy günlükleri için Apigee bağdaştırıcısındaki Authenticate
error bölümünde [permission denied] mesajı görülüyorsa sorunu çözmek için aşağıdaki adımları uygulayın:
- API isteğinde gönderilen API anahtarını, API ürününe bağlı uygulamada bulunan API anahtarı değeriyle karşılaştırın.
- İstemci tarafından kullanılan API anahtarı geçerli değilse istemciden geçerli API anahtarını göndermesini isteyin.
- İstemci tarafından kullanılan API anahtarı geçerliyse ve HTTP
403hatası görmeye devam ediyorsanız lütfen bu durumu daha ayrıntılı olarak incelemek için Apigee Edge Destek Ekibi ile iletişime geçin.
Neden: Apigee Adapter for Envoy, uzak hizmet API proxy'siyle iletişim kuramıyor
Yapılandırılan uzak hizmet ana makinesi geçersizse Apigee Adapter for Envoy, uzak hizmet API proxy'siyle iletişim kuramadığında bu hata oluşur.
Teşhis
Sorunu teşhis etmek için aşağıdaki adımları uygulayın:
- Yukarıdaki 2. adımda açıklandığı şekilde hata ayıklama günlüklerini etkinleştirin.
-
Apigee Adapter for Envoy günlüklerini kontrol edin ve aşağıdaki mesajı gördüğünüzü doğrulayın:
Error retrieving products: REQUEST_URI: no such host
Örnek hata ayıklama günlüğü çıkışı:
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
Bu örnekte, uzak sunucu API proxy'si URL'sinde sağlanan ana makine adı,
no such hosthatasında belirtildiği gibi geçerli olmadığından Apigee Adapter for Envoy, remote-service API proxy'si ile iletişim kuramadı . - Apigee Adapter for Envoy günlüklerinde
no such hostmesajını içeren bir günlük girişi varsa sorunun nedeni budur. Aksi takdirde, Neden: Envoy proxy, Apigee Adapter for Envoy ile iletişim kuramıyor bölümüne gidin.
Çözünürlük
Yukarıdaki hatalar Apigee Adapter for Envoy günlüklerinde gösteriliyorsa sorunu çözmek için aşağıdaki adımları uygulayın:
Envoy için Apigee bağdaştırıcısı yapılandırma dosyasını kontrol edin ve belirtilen uzak hizmet API proxy URL'sinin geçerli olduğunu doğrulayın.
Aksi takdirde, Envoy için Apigee Adaptörü'nü durdurun, yapılandırma dosyasındaki uzak hizmet API proxy URL'sini düzeltin, Envoy için Apigee Adaptörü'nü başlatın, başka bir API isteği gönderin ve düzeltmeyi doğrulayın.
Örnek yapılandırma:
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: SECRETremote-serviceAPI proxy'sinin ilgili Edge ortamına dağıtıldığını doğrulayın. Değilseremote-serviceAPI proxy'sini ilgili Edge ortamında dağıtın ve tekrar deneyin.- Envoy için Apigee Adaptörü ile
remote-serviceAPI proxy uç noktası arasındaki ağ bağlantısını doğrulayın. Ağ bağlantısıyla ilgili sorunlar tespit edilirse ağ ekibinizle iletişime geçip sorunu çözmeye çalışın.
Nedeni: Envoy proxy, Apigee Adapter for Envoy ile iletişim kuramıyor
Teşhis
Sorunu teşhis etmek için aşağıdaki adımları uygulayın:
Envoy'da hata ayıklama günlüklerini etkinleştirdiğinizden emin olun. Aksi takdirde, hata ayıklama günlüklerini etkinleştirerek Envoy'u durdurup yeniden başlatın. Ardından başka bir API isteği gönderin.
Bağımsız dağıtımlar:
envoy -c envoy-config.yaml -l debug
Kubernetes/Istio tabanlı dağıtımlar:
kubectl -n=istio-system get pods kubectl -n=istio-system exec -it INGRESS_GATEWAY_NAME bash -- curl -X POST localhost:15000/logging?connection=debug
- Apigee Adapter for Envoy günlüklerini kontrol edin ve şu mesajı içeren bir günlük girişi olduğunu doğrulayın:
connecting to APIGEE_ENVOY_ADAPTER_HOST:5000
Ardından şunlar gelir:
upstream connect error or disconnect/reset before headers. reset reason: ACTUAL_REASON
Örnek hata ayıklama günlüğü çıkışı:
[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'
Yukarıdaki örnekte, Envoy'un
connection failurenedeniyle Apigee Adapter for Envoy ile iletişim kuramadığı gösterilmektedir. connection failuresimgesinin gösterilmesinin birden fazla nedeni olabilir. Şimdi her bir senaryoya bakalım.
1. senaryo: Bağdaştırıcı işlemi çalışmıyor
Envoy için Apigee bağdaştırıcısı işlemi çalışmıyorsa bu hata oluşabilir.
- Aşağıdaki komutu çalıştırarak Envoy için Apigee Bağdaştırıcısı işleminin çalıştığını doğrulayın. Envoy için Apigee Adaptörü işlemi çalışıyorsa aşağıdaki komutun sonucu bu işlemi listelemelidir.
ps -ef | grep apigee-remote-service-envoy
- Çalışmıyorsa sorunun nedeni budur.
Çözünürlük
- Apigee Adapter for Envoy işlemi çalışmıyorsa Apigee Adapter for Envoy'u başlatın.
- Başka bir API isteği gönderin ve sorunun düzeltilip düzeltilmediğini doğrulayın.
2. senaryo: Bağdaştırıcı işlemi, belirli bağlantı noktasını dinlemiyor
Envoy için Apigee Adaptörü işlemi belirli bir bağlantı noktasını dinlemiyorsa bu hata oluşabilir.
Apigee Adapter for Envoy işlemi çalışıyorsa 5000 numaralı bağlantı noktasında dinlenen bir soket olduğunu doğrulayın: APIGEE_ENVOY_ADAPTER_HOST:5000. Bunu doğrulamak için netstat komutunu çalıştırabilirsiniz:
sudo netstat -lnp | grep 5000
Örnek çıkış:
sudo netstat -lnp | grep 5000 tcp6 0 0 :::5000 :::* LISTEN 1596530/./apigee-re
5000 numaralı bağlantı noktasında dinleme yapan bir soket yoksa bu durum sorunun nedeni olabilir.
Çözünürlük
- Apigee Adapter for Envoy'u durdurup yeniden başlatın.
- Başka bir API isteği gönderin ve sorunun düzeltilip düzeltilmediğini doğrulayın.
3. Senaryo: Envoy ile Apigee Adapter for Envoy arasındaki ağ bağlantısı
- Envoy ile Apigee Adapter for Envoy arasındaki ağ bağlantısını doğrulayın:
ssh $ENVOY_HOST telnet $APIGEE_ENVOY_ADAPTER_HOST 5000
Telnet, Apigee Adapter for Envoy'e TCP bağlantısı oluşturabiliyorsa aşağıdakine benzer bir çıkış gösterilir:
telnet $APIGEE_ENVOY_ADAPTER_HOST 5000 Trying ::1... Connected to localhost. Escape character is '^]'.
- Telnet ile
Connection timed outhatasını görüyorsanız bu, Envoy ile Apigee Adapter for Envoy arasında ağ bağlantısı sorunu olduğunu gösterir.
Çözünürlük
Envoy ile Envoy için Apigee bağdaştırıcısı arasında ağ bağlantısıyla ilgili sorunlar görürseniz lütfen ağ ekibinizle iletişime geçin ve sorunu çözmeye çalışın.
Sorun devam ederse Toplanması gereken teşhis bilgileri başlıklı makaleye gidin.
Teşhis bilgilerini toplamalıdır
Yukarıdaki talimatları uyguladıktan sonra sorun devam ederse aşağıdaki teşhis bilgilerini toplayın ve Apigee Edge Destek Ekibi ile iletişime geçin:
-
Kullanılan Apigee ürünü:
Örnek: Apigee Edge Cloud, Apigee OPDK, Apigee hybrid, Apigee X
- Apigee kuruluşu ve ortamı
Edge API kullanılarak okunan API ürünü tanımı:
curl -i -u $USER:$PASSWORD $MANAGEMENT_SERVER_ENDPOINT/v1/organizations/$ORGANIZATION/apiproducts/$API_PRODUCT
Referans: Apigee Edge API'leri
Apigee Edge kullanıcı arayüzünü kullanarak
remote-serviceAPI proxy'sinde bir izleme oturumu başlatın. Bu sorunu yeniden oluşturun ve İzleme oturumu XML dosyasını paylaşın.Referans: İzleme aracını kullanma | Apigee Edge
Apigee Adapter for Envoy günlükleri (belirli dönemle ilgili tüm günlükler)
Bağımsız dağıtımlar:
# by default Apigee Envoy write logs to stdout and stderr, check your deployment configuration and collect logs accordingly
Kubernetes/Istio tabanlı dağıtımlar:
kubectl -n=apigee get pods kubectl -n=apigee logs APIGEE_REMOTE_SERVICE_ENVOY_POD_NAME > apigee-remote-service-envoy.log
curlkomutu kullanılarak Envoy proxy'sine gönderilen bir API isteği (curlkomutunun tam çıkışı):curl -v ENVOY_PROXY_ENDPOINT
curlkomutu kullanılarak hedef hizmete gönderilen bir API isteği (curlkomutunun tam çıkışı):curl -v TARGET_SERVICE_ENDPOINT