Apigee Edge belgelerini görüntülüyorsunuz.
Apigee X belgelerine gidin. bilgi
Belirti
Envoy Proxy, Apigee Adapter for Envoy ile ç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, HTTP 403
hatası verir:
Neden | Açıklama | Şunun için geçerli sorun giderme talimatları: |
---|---|---|
API ürünü etkin değil | API ürünü, belirli ortam için etkin değil. | Edge Herkese Açık ve Özel Bulut kullanıcıları |
API Ürününde hedef hizmet URI'si yolu eksik | Hedef hizmetin URI yolu eksik veya API kaynakları altındaki API ürününe eklenmemiş. | Edge Herkese Açık ve Özel Bulut kullanıcıları |
API ürününde ana makine adı eksik | İstemci API isteğinde belirtilen ana makine adı, Apigee uzak hizmet hedefleri altındaki API ürününde eksik. | Edge Herkese Açık ve Özel Bulut kullanıcıları |
İstek başlığında API anahtarı eksik | API anahtarı, x-api-key HTTP başlığında iletilmez. |
Edge Herkese Açık ve Özel Bulut kullanıcıları |
Geçersiz API anahtarı | İsteğin bir parçası olarak iletilen API anahtarı geçersiz. | Edge Herkese Açık ve Özel Bulut kullanıcıları |
Envoy için Apigee Bağdaştırıcısı, uzaktan hizmet API proxy'si ile iletişim kuramıyor | Apigee Adapter for Envoy, uzaktan hizmet API proxy'si ile iletişim kuramıyor. | Edge Herkese Açık ve Özel Bulut 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 Herkese Açık ve Özel Bulut kullanıcıları |
Başlamadan önce
- Envoy proxy'den
403 Forbidden
yanı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ı toplamak için Apigee Adapter for Envoy'da hata ayıklama günlüklerini etkinleştirdiğinizden emin olun. Aksi takdirde, Apigee Adapter for Envoy'u durdurup yeniden başlatın ve aşağıdaki komutu kullanarak hata ayıklama günlüklerini etkinleştirin:
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 çağrıldığı belirli ortamda etkinleştirilmezse oluşur.
Teşhis
Sorunu teşhis etmek için aşağıdaki adımları uygulayın:
- Hata ayıklama günlüklerini, yukarıdaki 2. adımda açıklandığı şekilde etkinleştirin.
- Apigee Adapter for Envoy günlüklerini kontrol edin ve
Authorizing request
bölümünde aşağıdaki mesajın görüntülendiğini doğrulayın:product: API_PRODUCT_NAME not found
Örnek Hata Ayıklama Günlüğü Çıktısı:
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-1
API ürününün Apigee Adapter for Envoy'da bulunmadığı gösterilmektedir.Apigee günlük kaydı için Apigee Bağdaştırıcısı hakkında daha fazla bilgi için Günlük Kaydı bölümüne bakın.
- API isteğini yetkilendirirken bu mesajı görürseniz bu, büyük olasılıkla ilgili API ürününün, API çağrıları yaptığınız belirli bir ortam için etkin olmadığını gösterir.
- 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'u yapılandırmak için kullandığınız belirli API ürününü tıklayın.
- API isteklerinde bulunduğunuz belirli ortamın API ürününde etkinleştirildiğini doğrulayın.
- İlgili ortam API Ürünü'nde etkin değilse bu sorunun nedeni budur.
- Belirli bir ortam zaten etkinleştirilmişse Neden: API Ürününde hedef hizmet URI'si yolu eksik bölümüne gidin.
Çözünürlük
İlgili ortam API ürününde etkin değilse 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'u yapılandırmak için kullandığınız belirli 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 yapmak istediğiniz ortamı etkinleştirin.
- Kaydet'i tıklayın.
Neden: API ürününde hedef hizmet URI'si yolu eksik
Bu hata, hedefin URI yolu, Envoy Proxy tarafından kullanılan belirli bir API ürününde belirtilmemişse oluşur.
Teşhis
Sorunu teşhis etmek için aşağıdaki adımları uygulayın:
- Hata ayıklama günlüklerini, yukarıdaki 2. adımda açıklandığı şekilde etkinleştirin.
-
Apigee Adapter for Envoy günlüklerini kontrol edin ve
Authorizing request
bölümünde, belirli bir hedefle ilişkili API Ürünü için aşağıdaki mesajın görüntülendiğini doğrulayın:no path: REQUEST_URI_PATH
Örnek Hata Ayıklama Günlüğü Çıktısı:
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 çıkışta şu mesaj gösterilir:
no path: /echo1
Bu,
/echo1
yolununENVOY-PRODUCT-1
API ürününde bulunamadığını belirtir. - Apigee Adapter for Envoy hata ayıklama günlüklerinde
no path: REQUEST_URI_PATH
mesajını görüyorsanız sorunun nedeni budur. Aksi takdirde, Neden: API ürününde ana makine adı eksik bölümüne gidin.
Çözünürlük
Söz konusu istek URI'si, belirli 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'u yapılandırmak için kullandığınız belirli 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 ürününe API istek URI'sı ekleyin.
- Envoy günlüklerini görmek için Apigee Adapter'ı izleyin ve Apigee Adapter for Envoy güncel API ürününü getirene kadar 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 eklenmezse oluşur.
Teşhis
Sorunu teşhis etmek için aşağıdaki adımları uygulayın:
- Hata ayıklama günlüklerini, yukarıdaki 2. adımda açıklandığı şekilde etkinleştirin.
Apigee Adapter for Envoy günlüklerini kontrol edin ve
Authorizing request
bölümünde, belirli bir hedefle ilişkili API Ürünü için aşağıdaki mesajın görüntülendiğini doğrulayın:no targets: HOSTNAME:PORT
Örnek Hata Ayıklama Günlüğü Çıktısı:
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,
httpbin1:8080
ana makine adı ve bağlantı noktası kombinasyonununENVOY-PRODUCT-1
API ürününde bulunamadığı gösterilmektedir.- Apigee Adapter for Envoy günlükleri, isteği yetkilendirirken
no targets: HOSTNAME:PORT
mesajı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'u yapılandırmak için kullandığınız belirli 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ı ekleyin ve Save'i (Kaydet) tıklayın.
Kullanıcı arayüzünde Apigee uzak hizmet hedefleri bölümünü görmüyorsanız API ürününe
apigee-remote-service-targets
adlı bir özel özellik ve Edge API'yi kullanarak 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 güncellenmiş API ürününü getirene kadar 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
Bu hata, istek üstbilgilerinin bir parçası olarak API Anahtarı iletilmezse oluşur.
Teşhis
Sorunu teşhis etmek için aşağıdaki adımları uygulayın:
- Hata ayıklama günlüklerini, yukarıdaki 2. adımda açıklandığı şekilde etkinleştirin.
- Apigee Adapter for Envoy günlüklerini kontrol edin ve
Authenticate error
bölümü altındaki[missing authentication]
mesajını gördüğünüzden emin olun.Örnek Hata Ayıklama Günlüğü Çıktısı:
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 çıkışta
[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,
Authenticate error
bölümünde[missing authentication]
mesajını içeren bir günlük girişi içeriyorsa sorunun nedeni budur. 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örüntülendiyse sorunu çözmek için aşağıdaki adımları uygulayın:
- İstemcinin, API isteğindeki
x-api-key
HTTP üst bilgisini kullanarak API anahtarını gönderip göndermediğini kontrol edin. Aksi takdirde, istemcidenx-api-key
HTTP üst bilgisinde API anahtarını göndermesini isteyin. - Envoy için Apigee Adapter yapılandırma dosyasını kontrol edin ve varsayılan API anahtarı başlığı adının (
x-api-key
) değ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-key
Yukarıdaki örnekte varsayılan API Anahtarı başlığı adı
api-key
olarak değiştirildi. Bu durumda, API anahtarınıapi-key
başlığının bir parçası olarak iletmeniz gerekir. - Varsayılan API anahtarı üst bilgi adı değiştirildiyse istemciden güncellenmiş API anahtarı başlık adını kullanmasını isteyin ve başka bir API isteği göndererek sorunun çözülüp çözülmediğini doğrulayın.
Neden: Geçersiz API anahtarı
Bu hata, istek başlığının bir parçası olarak geçersiz API Anahtarı iletilirse oluşur.
Teşhis
Sorunu teşhis etmek için aşağıdaki adımları uygulayın:
- Hata ayıklama günlüklerini, yukarıdaki 2. adımda açıklandığı şekilde etkinleştirin.
- Apigee Adapter for Envoy günlüklerini kontrol edin ve
Authenticate error
bölümü altında[permission denied]
mesajını gördüğünüzden emin olun. Bu genellikle API Anahtarı,fetchToken fetching: API_KEY
mesajıyla belirtilen Bağdaştırıcı tarafından getirildikten sonra gösterilir.Örnek Hata Ayıklama Günlüğü Çıktısı:
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ğildir.
- Apigee Adapter for Envoy günlüklerinde
Authenticate error
bölümü altında[permission denied]
ile bir günlük girişi bulunuyorsa bu durum, isteğin bir parçası olarak 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
[permission denied]
iletisi, Apigee Adapter for Envoy günlüklerinin Authenticate
error
bölümünde 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ırarak kontrol edin.
- İ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
403
hatasını görmeye devam ediyorsanız lütfen bu konuyu daha ayrıntılı bir şekilde araştırmak için Apigee Edge Destek Ekibi ile iletişime geçin.
Neden: Apigee Adapter for Envoy, uzaktan hizmet API proxy'si ile iletişim kuramıyor
Bu hata, yapılandırılan uzak hizmet ana makinesi geçersizse Apigee Adapter for Envoy uzak hizmet API Proxy'si ile iletişim kuramıyorsa ortaya çıkar.
Teşhis
Sorunu teşhis etmek için aşağıdaki adımları uygulayın:
- Hata ayıklama günlüklerini, yukarıdaki 2. adımda açıklandığı şekilde etkinleştirin.
-
Apigee Adapter for Envoy günlüklerini kontrol edin ve aşağıdaki mesajı gördüğünüzden emin olun:
Error retrieving products: REQUEST_URI: no such host
Örnek Hata Ayıklama Günlüğü Çıktısı:
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 URL'sinde sağlanan ana makine adı
no such host
hatasında belirtildiği gibi geçerli olmadığından Apigee Adapter for Envoy, uzak hizmetteki API proxy'si ile iletişim kuramadı . - Apigee Adapter for Envoy günlükleri,
no such host
mesajını içeren bir günlük girişi içeriyorsa sorunun nedeni budur. Aksi takdirde, Neden: Envoy proxy, Apigee Adapter for Envoy ile iletişim kuramıyor sayfasını inceleyin.
Çözünürlük
Yukarıdaki hatalar Apigee Adapter for Envoy günlüklerinde görüntüleniyorsa sorunu çözmek için aşağıdaki adımları uygulayın:
Apigee Adapter for Envoy 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 Adapter'ı durdurun, yapılandırma dosyasındaki uzak hizmet API proxy URL'sini düzeltin, Apigee Adapter for Envoy'u 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: SECRET
remote-service
API proxy'sinin ilgili Edge ortamında dağıtıldığını doğrulayın. Aksi takdirde,remote-service
API proxy'sini ilgili Edge ortamında dağıtıp tekrar deneyin.- Apigee Adapter for Envoy ve
remote-service
API proxy uç noktası arasındaki ağ bağlantısını doğrulayın. Herhangi bir ağ bağlantısı sorunu bulunursa ağ ekibinizle iletişime geçip sorunu çözmeye çalışın.
Neden: 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, Envoy'u durdurup tekrar başlatın ve hata ayıklama günlüklerini etkinleştirin. 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
ve ardından şu şekilde gelir:
upstream connect error or disconnect/reset before headers. reset reason: ACTUAL_REASON
Örnek Hata Ayıklama Günlüğü Çıktısı:
[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 örnek, Envoy'un
connection failure
nedeniyle Apigee Adapter for Envoy ile iletişim kuramadığını göstermektedir. connection failure
sorununun birkaç nedeni olabilir. Senaryoları tek tek inceleyelim.
1. Senaryo: Bağdaştırıcı işlemi çalışmıyor
Apigee Adapter for Envoy işlemi çalışmıyorsa bu hata oluşabilir.
- Aşağıdaki komutu çalıştırarak Apigee Adapter for Envoy işleminin çalıştığını doğrulayın. Apigee Adapter for Envoy işlemi çalışıyorsa aşağıdaki komutun sonucunda bu işlem listelenmelidir.
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 Envoy için Apigee Adapter'ı 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 ilgili bağlantı noktasında dinleme yapmıyor
Apigee Adapter for Envoy işlemi ilgili bağlantı noktasında dinleme gerçekleştirmiyorsa bu hata meydana gelebilir.
Apigee Adapter for Envoy işlemi çalışıyorsa 5000 numaralı bağlantı noktasında bir yuva dinleme 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 dinlediğiniz bir yuva yoksa bu sorunun nedeni bu 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ında 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 ile TCP bağlantısı sağlayabiliyorsa aşağıdakine benzer bir çıkış görüntülenir:
telnet $APIGEE_ENVOY_ADAPTER_HOST 5000 Trying ::1... Connected to localhost. Escape character is '^]'.
- Telnet'te
Connection timed out
hatasını gözlemlerseniz bu, Envoy ile Apigee Adapter for Envoy arasında bir ağ bağlantısı sorunu olduğu anlamına gelir.
Çözünürlük
Envoy ve Apigee Adapter for Envoy arasında ağ bağlantısı sorunu görürseniz lütfen ağ ekibinizle iletişime geçerek sorunu çözmeye çalışın.
Sorun devam ederse Teşhis bilgileri toplanmalı bölümüne gidin.
Teşhis bilgileri toplanmalıdır
Yukarıdaki talimatları uyguladıktan sonra sorun devam ederse aşağıdaki teşhis bilgilerini toplayıp Apigee Edge Destek Ekibi ile iletişime geçin:
-
Kullanılan Apigee ürünü:
Örnek: Apigee Edge Cloud, Apigee OPDK, ApigeeHybrid, Apigee X
- Apigee kuruluşu ve ortamı
Edge API kullanılarak API ürün tanımının okunması:
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-service
API 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 bir dönemle ilgili günlükleri tamamlayın)
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
curl
komutu (curl
komutunun tam çıkışı) kullanılarak Envoy proxy'ye gönderilen bir API isteği:curl -v ENVOY_PROXY_ENDPOINT
curl
komutu (curl
komutunun tam çıkışı) kullanılarak hedef hizmete gönderilen bir API isteği:curl -v TARGET_SERVICE_ENDPOINT