Envoy proxy'si, Apigee Bağdaştırıcısı'nda HTTP 403 Yasak hatası nedeniyle başarısız oluyor

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

  1. Envoy proxy'sinden 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
  2. 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:

  1. Yukarıdaki 2. adımda açıklandığı şekilde hata ayıklama günlüklerini etkinleştirin.
  2. Apigee Adapter for Envoy günlüklerini kontrol edin ve Authorizing request bö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-1 API ü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.

  3. 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.
  4. Bunu doğrulamak için aşağıdaki adımları uygulayın:
    1. Edge kullanıcı arayüzüne giriş yapın.
    2. 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.
    3. API isteklerini gönderdiğiniz ortamın API ürününde etkinleştirildiğini doğrulayın.
    4. API ürününde belirli bir ortam etkinleştirilmemişse bu sorunun nedeni budur.
  5. 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:

  1. Edge kullanıcı arayüzüne giriş yapın.
  2. 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.
  3. API ürünleri > Ürün adı sayfasında Düzenle'yi tıklayın.
  4. İlgili ortam onay kutusunu işaretleyerek API istekleri göndermek istediğiniz ortamı etkinleştirin.
  5. 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:

  1. Yukarıdaki 2. adımda açıklandığı şekilde hata ayıklama günlüklerini etkinleştirin.
  2. Envoy için Apigee Adaptörü 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ö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, /echo1 yolunun ENVOY-PRODUCT-1 API ürününde bulunamadığını gösterir.

  3. Apigee Adapter for Envoy hata ayıklama günlüklerinde no path: REQUEST_URI_PATH mesajı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:

  1. Edge kullanıcı arayüzüne giriş yapın.
  2. 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.
  3. API ürünleri > Ürün adı sayfasında Düzenle'yi tıklayın.
  4. API kaynakları bölmesinde, API isteği URI'sini API ürününe ekleyin.
  5. 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:

  1. Yukarıdaki 2. adımda açıklandığı şekilde hata ayıklama günlüklerini etkinleştirin.
  2. Envoy için Apigee Adaptörü 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ö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:8080 API ürününde ENVOY-PRODUCT-1 bulunamadığı gösterilmektedir.

  3. 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:

  1. Edge kullanıcı arayüzüne giriş yapın.
  2. 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.
  3. API ürünleri > Ürün adı sayfasında Düzenle'yi tıklayın.
  4. 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-targets adlı 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": []
    }
  5. 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:

  1. Yukarıdaki 2. adımda açıklandığı şekilde hata ayıklama günlüklerini etkinleştirin.
  2. Apigee Adapter for Envoy günlüklerini kontrol edin ve [missing authentication] mesajının Authenticate error bö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.

  3. Apigee Adapter for Envoy günlükleri, [missing authentication] mesajını içeren bir günlük girişi içeriyorsa Authenticate error bö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:

  1. İstemcinin, API isteğinde x-api-key HTTP başlığını kullanarak API anahtarını gönderip göndermediğini kontrol edin. Aksi takdirde, istemciden API anahtarını HTTP başlığında x-api-key göndermesini isteyin.
  2. 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-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ık adı api-key olarak değiştirilmiştir. Bu durumda, API anahtarını üstbilginin bir parçası olarak iletmeniz gerekir api-key.

  3. 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:

  1. Yukarıdaki 2. adımda açıklandığı şekilde hata ayıklama günlüklerini etkinleştirin.
  2. Apigee Adapter for Envoy günlüklerini kontrol edin ve [permission denied] bölümünde Authenticate error mesajını gördüğünüzü doğrulayın. Bu genellikle, fetchToken fetching: API_KEY mesajı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.

  3. Envoy için Apigee Adaptörü günlükleri, [permission denied] bölümünde Authenticate error iç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:

  1. 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.
  2. İstemci tarafından kullanılan API anahtarı geçerli değilse istemciden geçerli API anahtarını göndermesini isteyin.
  3. İstemci tarafından kullanılan API anahtarı geçerliyse ve HTTP 403 hatası 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:

  1. Yukarıdaki 2. adımda açıklandığı şekilde hata ayıklama günlüklerini etkinleştirin.
  2. 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 host hatasında belirtildiği gibi geçerli olmadığından Apigee Adapter for Envoy, remote-service API proxy'si ile iletişim kuramadı .

  3. Apigee Adapter for Envoy günlüklerinde no such host mesajı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:

  1. 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: SECRET
          
  2. remote-service API proxy'sinin ilgili Edge ortamına dağıtıldığını doğrulayın. Değilse remote-service API proxy'sini ilgili Edge ortamında dağıtın ve tekrar deneyin.
  3. Envoy için Apigee Adaptörü ile remote-service API 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:

  1. 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
  2. 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 failure nedeniyle Apigee Adapter for Envoy ile iletişim kuramadığı gösterilmektedir.

  3. connection failure simgesinin 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.

  1. 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
  2. Çalışmıyorsa sorunun nedeni budur.

Çözünürlük

  1. Apigee Adapter for Envoy işlemi çalışmıyorsa Apigee Adapter for Envoy'u başlatın.
  2. 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

  1. Apigee Adapter for Envoy'u durdurup yeniden başlatın.
  2. 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ı

  1. 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 '^]'.
  2. Telnet ile Connection timed out hatası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:

  1. Kullanılan Apigee ürünü:

    Örnek: Apigee Edge Cloud, Apigee OPDK, Apigee hybrid, Apigee X

  2. Apigee kuruluşu ve ortamı
  3. 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

  4. 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

  5. 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
  6. curl komutu kullanılarak Envoy proxy'sine gönderilen bir API isteği (curl komutunun tam çıkışı):
    curl -v ENVOY_PROXY_ENDPOINT
  7. curl komutu kullanılarak hedef hizmete gönderilen bir API isteği (curl komutunun tam çıkışı):
    curl -v TARGET_SERVICE_ENDPOINT