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

  1. 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
    
  2. 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:

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

  3. 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.
  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'u yapılandırmak için kullandığınız belirli API ürününü tıklayın.
    3. API isteklerinde bulunduğunuz belirli ortamın API ürününde etkinleştirildiğini doğrulayın.
    4. İlgili ortam API Ürünü'nde etkin değilse bu sorunun nedeni budur.
  5. 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:

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

  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 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 yolunun ENVOY-PRODUCT-1 API ürününde bulunamadığını belirtir.

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

  1. Edge kullanıcı arayüzüne giriş yapın.
  2. 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.
  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ı ekleyin.
  5. 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:

  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 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ı kombinasyonunun ENVOY-PRODUCT-1 API ürününde 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'u yapılandırmak için kullandığınız belirli 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ı 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": []
    }
    
  5. 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:

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

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

  1. İstemcinin, API isteğindeki x-api-key HTTP üst bilgisini kullanarak API anahtarını gönderip göndermediğini kontrol edin. Aksi takdirde, istemciden x-api-key HTTP üst bilgisinde API anahtarını göndermesini isteyin.
  2. 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.

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

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

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

  1. 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.
  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ı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:

  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:

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

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

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

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

    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.

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

  1. 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
    
  2. Ç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'ı 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 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

  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ı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, 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 '^]'.
    
  2. 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:

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

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

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

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