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.
. Git: Apigee X belgeleri.
bilgi

Belirti

Envoy Proxy, üzerinden çağrıldığında HTTP 403 Forbidden hatasıyla başarısız oluyor Envoy için Apigee Adapter.

Hata mesajı

Aşağıdaki hata mesajı görüntülenir:

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

Envoy proxy, aşağıdaki koşullardan biri geçerliyse HTTP 403 hatası verir gerçekleşenler:

Neden Açıklama Şunun için geçerli sorun giderme talimatları:
API ürünü etkin değil API ürünü, ilgili ortam için etkinleştirilmedi. Edge Herkese Açık ve Private Cloud kullanıcıları
API Ürününde hedef hizmet URI'si yolu eksik Hedef hizmetin URI yolu eksik veya API altındaki API ürününe eklenmemiş kaynaklar. Edge Herkese Açık ve Private Cloud kullanıcıları
API ürününde eksik ana makine adı İstemci API isteğinde belirtilen ana makine adı, Apigee kapsamındaki API ürününde eksik uzaktan hizmet hedefleridir. Edge Herkese Açık ve Private Cloud kullanıcıları
İstek başlığında API anahtarı eksik API anahtarı, x-api-key HTTP başlığında geçirilmiyor. Edge Herkese Açık ve Private Cloud kullanıcıları
Geçersiz API anahtarı İsteğin bir parçası olarak iletilen API anahtarı geçersiz. Edge Herkese Açık ve Private Cloud kullanıcıları
Envoy için Apigee Adapter şu işlemi yapamıyor: Remote-service API proxy'si ile iletişim kurma Apigee Adapter for Envoy, uzaktan hizmet API proxy'si ile iletişim kuramıyor. Edge Herkese Açık ve Private Cloud kullanıcıları
Envoy proxy iletişim kuramıyor Envoy için Apigee Adapter ile Envoy proxy, Apigee Adapter for Envoy ile iletişim kuramıyor Edge Herkese Açık ve Private Cloud kullanıcıları

Başlamadan önce

  1. Şuradan 403 Forbidden yanıt mesajını aldığınızı doğrulayın: Envoy proxy'si. Örnek:
    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:

    Cihazlarla ilgili daha ayrıntılı bilgi edinmek için Apigee Adapter for Envoy'da hata ayıklama günlüklerini etkinleştirdiğinizden emin olun. gösterir. Sorun çözülmediyse Apigee Adapter for Envoy'u durdurup hata ayıklama günlüklerini etkinleştirin. kullanabilirsiniz:

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

Teşhis

Sorunu teşhis etmek için aşağıdaki adımları uygulayın:

  1. Hata ayıklama günlüklerini yukarıdaki 2. adımda açıklandığı şekilde etkinleştirin.
  2. Apigee Adapter for Envoy günlüklerini kontrol edin ve aşağıdaki mesajın görüntülendiğini doğrulayın. Authorizing request bölümünde:
    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 örnek, ENVOY-PRODUCT-1 API ürünü şu konumda bulunamadı: Envoy için Apigee Adapter.

    Envoy günlük kaydı için Apigee Adapter hakkında daha fazla bilgi edinmek istiyorsanız Günlük kaydı.

  3. API isteğini yetkilendirirken bu iletiyi görürseniz büyük olasılıkla bu, söz konusu API Ürünü, kullandığınız belirli bir ortam için etkinleştirilmez. yapmalarına yardımcı oluyor.
  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 ise kullandığınız API ürününü tıklayın Envoy için Apigee Adapter'ı yapılandırmak amacıyla kullanılır.
    3. API isteklerinde bulunduğunuz belirli ortamın etkinleştirildiğinden emin olun.
    4. Belirli bir ortam API ürününde etkinleştirilmemişse bunun nedeni budur iletişime geçin.
  5. İlgili ortam zaten etkinleştirilmişse şuraya gidin: Neden: API Ürününde hedef hizmet URI'si yolu eksik.

Çözünürlük

İlgili ortam API ürününde etkinleştirilmemişse aşağıdaki adımları uygulayarak sorunu çözün:

  1. Edge kullanıcı arayüzüne giriş yapın.
  2. Yayınla > API ürünleri sayfasında kullandığınız belirli API ürününü tıklayın Apigee Adapter for Envoy'u yapılandırdık.
  3. API ürünleri > Ürün adı sayfasında Düzenle'yi tıklayın.
  4. Şu seçeneği belirleyerek API isteklerinde bulunmak istediğiniz belirli ortamı etkinleştirin: ilgili ortam onay kutusunu işaretleyin.
  5. Kaydet'i tıklayın.

Neden: API ürününde hedef hizmet URI'si yolu eksik

Bu hata, hedefin URI yolu kullanılan API Ürünü'nde belirtilmemişse ortaya çıkar (Envoy Proxy tarafından)

Teşhis

Sorunu teşhis etmek için aşağıdaki adımları uygulayın:

  1. Hata ayıklama günlüklerini yukarıdaki 2. adımda açıklandığı şekilde etkinleştirin.
  2. Apigee Adapter for Envoy günlüklerini kontrol edin ve aşağıdaki mesajın olduğunu doğrulayın: bölümünün altında belirli bir hedefle ilişkilendirilmiş belirli API ürünü için görüntülenir. Authorizing request:

    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 yolunun API ürününde bulunmadığını gösterir ENVOY-PRODUCT-1.

  3. no path: REQUEST_URI_PATH mesajını Apigee Adapter for Envoy hata ayıklama günlükleri o zaman sorunun nedenidir. Değilse şu sayfaya gidin: Neden: API ürününde ana makine adı eksik.

Çözünürlük

Belirli hedef için API Ürünü'ne belirli bir istek URI'sı eklenmezse 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 ise kullandığınız API ürününü tıklayın Envoy için Apigee Adapter'ı yapılandırmak amacıyla kullanılır.
  3. API ürünleri > Ürün adı sayfasında Düzenle'yi tıklayın.
  4. API kaynakları bölmesinde, API ürününe API istek URI'sını ekleyin.
  5. Envoy günlükleri için Apigee Adapter'ı izleyin ve Envoy için Apigee Adapter'ın kullanılmasını bekleyin Güncellenmiş API ürününü getirir. 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, belirtilen spesifik Envoy Proxy tarafından kullanılan API Ürünü.

Teşhis

Sorunu teşhis etmek için aşağıdaki adımları uygulayın:

  1. Hata ayıklama günlüklerini yukarıdaki 2. adımda açıklandığı şekilde etkinleştirin.
  2. Apigee Adapter for Envoy günlüklerini kontrol edin ve aşağıdaki mesajın olduğunu doğrulayın: bölümünün altında belirli bir hedefle ilişkilendirilmiş belirli API ürünü için görüntülenir. Authorizing request:

    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 ana makine adı ve bağlantı noktası kombinasyonu gösterilmektedir: httpbin1:8080 ENVOY-PRODUCT-1 API ürününde bulunamadı.

  3. Apigee Adapter for Envoy günlüklerinde, isteği yetkilendirirken no targets: HOSTNAME:PORT mesajı içeren bir giriş bulunuyorsa bu giriş bir açıklama ekleyin. Değilse şu sayfaya gidin: Neden: İstek başlığında API anahtarı eksik.

Çözünürlük

Hedef ana makine adı ve bağlantı noktası kombinasyonu API ürününe eklenmezse 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 ise kullandığınız API ürününü tıklayın Envoy için Apigee Adapter'ı yapılandırmak amacıyla kullanılır.
  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ı ekleyin ve ve Kaydet'i tıklayın.

    Kullanıcı arayüzünde Apigee uzaktan hizmet hedefleri bölümünü görmüyorsanız, API ürününe apigee-remote-service-targets adını ve HOSTNAME:PORT değerini girin. Ö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 Envoy günlükleri için Apigee Adapter'ı izleyin ve Apigee Adapter for Envoy, güncellenmiş API ürününü getiriyor. Ardından başka bir API gönderin düzeltmeyi doğrulama isteğinde bulunun.

Neden: İstek başlığında API anahtarı eksik

Bu hata, API Anahtarı istek başlıklarının bir parçası olarak iletilmezse ortaya çıkar.

Teşhis

Sorunu teşhis etmek için aşağıdaki adımları uygulayın:

  1. Hata ayıklama günlüklerini yukarıdaki 2. adımda açıklandığı şekilde etkinleştirin.
  2. Apigee Adapter for Envoy günlüklerini kontrol edin ve burada Authenticate error altında [missing authentication] mesaj bölümüne bakın.

    Ö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ı bulunuyor. Bu mesaj, API anahtarının istek başlığı ekleyin.

  3. Apigee Adapter for Envoy günlüklerinde, Authenticate error bölümünün altında [missing authentication] mesajını içeren bir günlük girişi bulunuyorsa bu bir açıklama ekleyin. Değilse şu sayfaya gidin: Neden: Geçersiz API anahtarı.

Çözünürlük

[missing authentication] hatası Apigee Adapter for Envoy günlükleri, sorunu çözmek için aşağıdaki adımları uygulayın:

  1. İstemcinin API anahtarını HTTP üstbilgisini x-api-key kullanarak gönderip göndermediğini kontrol edin. API isteği. İlişkilendirilmemişse istemcinin HTTP başlığında API anahtarını göndermesini isteyin x-api-key
  2. Apigee Adapter for Envoy yapılandırma dosyasını kontrol edin ve varsayılan API anahtarının başlık adı x-api-key değiştirildi, ö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 Bu durumda, başlığın bir parçası olarak API Anahtarını iletmeniz gerekir api-key

  3. Varsayılan API anahtarı başlığı adı değiştirildiyse istemciden API anahtarı başlığı adına gidip başka bir API isteği gönderip 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ı iletildiğinde ortaya çıkar.

Teşhis

Sorunu teşhis etmek için aşağıdaki adımları uygulayın:

  1. Hata ayıklama günlüklerini yukarıdaki 2. adımda açıklandığı şekilde etkinleştirin.
  2. Apigee Adapter for Envoy günlüklerini kontrol edin ve aşağıdaki mesajı gördüğünüzden emin olun: [permission denied] Authenticate error bölümünde. Bu genellikle API Anahtarı Bağdaştırıcı tarafından alındıktan sonra görüntülenir. fetchToken fetching: API_KEY mesajı.

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

  3. Apigee Adapter for Envoy günlüklerinde, Authenticate error bölümünün altında [permission denied] bulunan bir günlük girişi bulunuyorsa bu giriş şunları gösterir: İsteğin bir parçası olarak iletilen API Anahtarı geçersiz ve sorunun nedeni bu. Değilse şu sayfaya gidin: Neden: Envoy için Apigee Adapter uzaktan hizmet API proxy'si ile iletişim kuramıyor.

Çözünürlük

Apigee Adapter for Envoy günlüklerindeki Authenticate error bölümünde [permission denied] mesajı gözlemleniyorsa aşağıdaki adımları uygulayın sorunu çözmek için:

  1. API isteğinde gönderilen API anahtarını, API ürününe bağlı olması gerekir.
  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 görmeye devam ediyorsanız 403 hatası. Bu sorunun daha ayrıntılı olarak araştırılması için lütfen Apigee Edge Destek Ekibi ile iletişime geçin.

Neden: Envoy için Apigee Adapter, uzaktan hizmet API proxy'si ile iletişim kuramıyor

Bu hata, Apigee Adapter for Envoy uzaktan kumandayla iletişim kuramadığında oluşur service API Proxy'sini kullanın.

Teşhis

Sorunu teşhis etmek için aşağıdaki adımları uygulayın:

  1. Hata ayıklama günlüklerini yukarıdaki 2. adımda açıklandığı şekilde etkinleştirin.
  2. Apigee Adapter for Envoy günlüklerini kontrol edin ve şu 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 Apigee Adapter for Envoy, Remote-service API proxy'si, çünkü uzak sunucu API Proxy'sinde sağlanan ana makine adı no such host hatasıyla belirtildiği gibi URL geçerli değil .

  3. Apigee Adapter for Envoy günlüklerinde, no such host mesajı içeren bir günlük girişi varsa sorunun nedeni budur. Değilse şu sayfaya gidin: Neden: Envoy proxy, Apigee Adapter for Envoy ile iletişim kuramıyor.

Çözünürlük

Apigee Adapter for Envoy günlüklerinde yukarıdaki hatalar gösteriliyorsa aşağıdaki işlemleri yapın: adımları uygulayın:

  1. Apigee Adapter for Envoy yapılandırma dosyasını kontrol edin ve verilen Remote-service API proxy URL'si geçerli.

    Değilse Envoy için Apigee Adapter'ı durdurun, uzaktan hizmet API proxy'si URL'sini şuradan düzeltin: yapılandırma dosyasını yüklemek için Apigee Adapter for Envoy'u başlatın ve başka bir API isteği göndererek 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'de dağıtıldığını doğrulayın bahsedeceğim. Aksi takdirde remote-service API proxy'sini ilgili Uçta dağıtın ortama gidip tekrar deneyin.
  3. Apigee Adapter for Envoy ve remote-service API proxy uç noktası. Ağ bağlantısı varsa tespit ettikten sonra, ağ ekibinizle bağlantı kurun ve sorunu çözmeye çalışın.

Neden: Envoy proxy, Envoy için Apigee Adapter 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. Açılmazsa Envoy'u durdurun ve tekrar başlatın. 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
    
  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 şu adım 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 örnekte, Envoy adlı cihazın connection failure nedeniyle Envoy için Apigee Adaptörü.

  3. connection failure birden çok nedene bağlı olabilir. Her bir senaryoya bakalım.

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.

  1. Aşağıdaki komutu çalıştırarak Apigee Adapter for Envoy işleminin çalıştığını doğrulayın komutunu kullanın. Apigee Adapter for Envoy işlemi çalışıyorsa aşağıdaki sonuçlar komutu bu komutu listeleyecektir.
    ps -ef | grep apigee-remote-service-envoy
    
  2. Cihazınız çalışmıyorsa sorunun nedeni budur.

Çözünürlük

  1. Apigee Adapter for Envoy işlemi çalışmıyorsa Envoy için Apigee Adapter.
  2. Başka bir API isteğinde bulunun ve sorunun düzelip düzelmediğini doğrulayın.

2. Senaryo: Bağdaştırıcı işlemi belirli bağlantı noktasında dinlemiyor

Apigee Adapter for Envoy işlemi, ilgili bağlantı noktasında dinleme yapmıyorsa bu hata oluşabilir.

Envoy için Apigee Adapter işlemi çalışıyorsa dinlemede bir yuva olduğundan emin olun bağlantı noktası 5000: APIGEE_ENVOY_ADAPTER_HOST:5000. Bu URL'yi Bunu doğrulamak için netstat komutunu kullanın:

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 bağlantısı yoksa sorunun nedeni bu olabilir.

Çözünürlük

  1. Apigee Adapter for Envoy'u durdurup tekrar başlatın.
  2. Başka bir API isteğinde bulunun ve sorunun düzelip düzelmediğini doğrulayın.

3. Senaryo: Envoy ile Apigee Adapter for Envoy Arasında 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, Envoy için Apigee Adapter ile TCP bağlantısı kurabilseydi şuna benzer bir çıkış görüntülenir:

    telnet $APIGEE_ENVOY_ADAPTER_HOST 5000
    
    Trying ::1...
    Connected to localhost.
    Escape character is '^]'.
    
  2. Telnet’te Connection timed out hatasıyla karşılaşırsanız, bu durum telnet Envoy ile Apigee Adapter for Envoy arasında bir ağ bağlantısı sorunu var.

Çözünürlük

Envoy ile Apigee Adapter for Envoy arasında ağ bağlantısı sorunuyla karşılaşırsanız lütfen ağ ekibinizle etkileşim kurun ve sorunu çözmeye çalışın.

Sorun devam ederse şu adrese gidin: Teşhis bilgileri toplanmalıdır.

Teşhis bilgileri toplanmalıdır

Yukarıdaki talimatları uyguladıktan sonra sorun devam ederse aşağıdaki teşhisleri toplayın bilgi edinin 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'yi kullanarak API ürün tanımını okuma:

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

    Referans: Apigee Edge API'leri

  4. Şunu kullanarak remote-service API proxy'sinde bir izleme oturumu başlatın: Apigee Edge kullanıcı arayüzü. 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 (belirtilen dönemle ilgili eksiksiz 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'ye 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 (tam curl komutunun çıkışı):
    curl -v TARGET_SERVICE_ENDPOINT