Serwer proxy Envoy nie działa z powodu błędu HTTP 403 „Dostęp zabroniony” w adapterze Apigee dla Envoy

Przeglądasz dokumentację Apigee Edge.
Przejdź do Dokumentacja Apigee X.
informacje.

Krótki opis problemu

Serwer proxy Envoy kończy się niepowodzeniem i zostaje wyświetlony błąd HTTP 403 Forbidden przy wywołaniu przez Adapter Apigee do Envoy

Komunikat o błędzie

Wyświetlany jest następujący komunikat o błędzie:

HTTP/1.1 403 Forbidden
content-length: 19
content-type: text/plain
date: Tue, 03 Nov 2020 00:20:10 GMT
server: istio-envoy

Możliwe przyczyny

Serwer proxy Envoy zgłosi błąd HTTP 403, jeśli jeden z tych warunków występują:

Przyczyna Opis Instrukcje rozwiązywania problemów dotyczące
Usługa API nie jest włączona Usługa API nie jest włączona w danym środowisku. Użytkownicy chmury publicznej i prywatnej Edge
Brak ścieżki identyfikatora URI usługi docelowej w usłudze API Brakuje ścieżki identyfikatora URI usługi docelowej lub nie dodano jej do usługi API w interfejsie API i zasobami Google Cloud. Użytkownicy chmury publicznej i prywatnej Edge
Brak nazwy hosta w usłudze API Brakuje nazwy hosta podanej w żądaniu do interfejsu API klienta w usłudze API w Apigee zdalnych celów usług. Użytkownicy chmury publicznej i prywatnej Edge
Brak klucza interfejsu API w nagłówku żądania Klucz interfejsu API nie jest przekazywany w nagłówku HTTP x-api-key. Użytkownicy chmury publicznej i prywatnej Edge
Nieprawidłowy klucz interfejsu API Klucz interfejsu API przekazywany w ramach żądania jest nieprawidłowy. Użytkownicy chmury publicznej i prywatnej Edge
Apigee Adapter for Envoy nie jest w stanie komunikacja z serwerem proxy interfejsu API usługi zdalnej Adapter Apigee dla Envoy nie może komunikować się z serwerem proxy API usługi zdalnej. Użytkownicy chmury publicznej i prywatnej Edge
Serwer proxy Envoy nie może się komunikować z adapterem Apigee dla Envoy Serwer proxy Envoy nie może komunikować się z adapterem Apigee dla Envoy Użytkownicy chmury publicznej i prywatnej Edge

Zanim zaczniesz

  1. Upewnij się, że w przeglądarce wyświetla się wiadomość z odpowiedzią 403 Forbidden Serwer proxy Envoy. Na przykład:
    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. Włącz dzienniki debugowania:

    Sprawdź, czy masz włączone logi debugowania w adapterze Apigee dla Envoy, aby zbierać więcej informacji o błąd. Jeśli nie, zatrzymaj adapter Apigee dla Envoy i uruchom go ponownie, co spowoduje włączenie logów debugowania za pomocą tego polecenia:

    apigee-remote-service-envoy -c config.yaml -l debug
    

Przyczyna: usługa API nie została włączona

Ten błąd występuje, jeśli dana usługa API używana przez serwer proxy Envoy nie jest włączona w w określonym środowisku, w którym wywoływane są wywołania interfejsu API.

Diagnostyka

Aby zdiagnozować problem, wykonaj te czynności:

  1. Włącz dzienniki debugowania w sposób opisany powyżej w kroku 2.
  2. Sprawdź adapter Apigee pod kątem logów Envoy i upewnij się, że wyświetla się następujący komunikat w sekcji Authorizing request:
    product: API_PRODUCT_NAME not found
    

    Przykładowe dane wyjściowe logu debugowania:

    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
    

    Powyższy przykład pokazuje, że nie znaleziono usługi interfejsu API ENVOY-PRODUCT-1 Adapter Apigee do Envoy.

    Więcej informacji o adapterze Apigee na potrzeby logowania Envoy znajdziesz w artykule Logowanie.

  3. Jeśli zobaczysz ten komunikat podczas autoryzacji żądania do interfejsu API, oznacza to, że najprawdopodobniej że dany produkt API nie został włączony w środowisku, w którym lub wykonywanie wywołań interfejsu API.
  4. Aby to sprawdzić, wykonaj następujące czynności:
    1. Zaloguj się w interfejsie Edge.
    2. W menu Opublikuj > API produktów, kliknij konkretny używany do konfigurowania adaptera Apigee dla Envoy.
    3. Sprawdź, czy środowisko, w którym wysyłasz żądania do interfejsu API, włączone w usłudze API.
    4. Jeśli dane środowisko nie jest włączone w usłudze API, to właśnie jest przyczyną .
  5. Jeśli dane środowisko jest już włączone, otwórz Przyczyna: brak ścieżki identyfikatora URI usługi docelowej w usłudze API Product

Rozdzielczość

Jeśli dane środowisko nie jest włączone w usłudze API, wykonaj te czynności, rozwiąż problem:

  1. Zaloguj się w interfejsie Edge.
  2. W menu Opublikuj > na stronie interfejsów API, kliknij nazwę używanej usługi API. za skonfigurowanie adaptera Apigee dla Envoy.
  3. Na stronie Usługi API > Nazwa usługi, kliknij Edytuj.
  4. Włącz konkretne środowisko, w którym chcesz wysyłać żądania do interfejsu API, wybierając pole wyboru odpowiedniego środowiska.
  5. Kliknij Zapisz.

Przyczyna: brak ścieżki identyfikatora URI usługi docelowej w usłudze API

Ten błąd występuje, jeśli ścieżka URI miejsca docelowego nie jest określona w konkretnej używanej usłudze API przez Envoy Proxy.

Diagnostyka

Aby zdiagnozować problem, wykonaj te czynności:

  1. Włącz dzienniki debugowania w sposób opisany powyżej w kroku 2.
  2. Sprawdź adapter Apigee dla logów Envoy i upewnij się, że poniższy komunikat to wyświetlane dla konkretnej usługi API powiązanej z konkretnym miejscem docelowym w tej sekcji Authorizing request:

    no path: REQUEST_URI_PATH
    

    Przykładowe dane wyjściowe logu debugowania:

    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)

    W przykładowych danych wyjściowych znajdziesz następujący komunikat:

    no path: /echo1
    

    Oznacza to, że nie znaleziono ścieżki /echo1 w usłudze API ENVOY-PRODUCT-1

  3. Jeśli wno path: REQUEST_URI_PATH To właśnie jest przyczyną tego problemu, jeśli korzystasz z adaptera Apigee na potrzeby logów debugowania Envoy. Jeśli nie, przejdź do Przyczyna: brak nazwy hosta w usłudze API.

Rozdzielczość

Jeśli identyfikator URI żądania nie zostanie dodany do usługi API dla danego miejsca docelowego, wykonaj te czynności, by rozwiązać problem:

  1. Zaloguj się w interfejsie Edge.
  2. W menu Opublikuj > API produktów, kliknij konkretny używany do konfigurowania adaptera Apigee dla Envoy.
  3. Na stronie Usługi API > Nazwa usługi, kliknij Edytuj.
  4. W panelu Zasoby interfejsu API dodaj do usługi API identyfikator URI żądania API.
  5. Monitoruj adapter Apigee na potrzeby logów Envoy i poczekaj na korzystanie z adaptera Apigee dla Envoy pobierze zaktualizowaną usługę API. Następnie wyślij kolejne żądanie do interfejsu API, aby sprawdzić poprawkę.

Przyczyna: brak nazwy hosta w usłudze API

Ten błąd występuje, jeśli docelowa kombinacja nazwy hosta i portu nie zostanie dodana do konkretnego Usługa API używana przez serwer proxy Envoy.

Diagnostyka

Aby zdiagnozować problem, wykonaj te czynności:

  1. Włącz dzienniki debugowania w sposób opisany powyżej w kroku 2.
  2. Sprawdź adapter Apigee dla logów Envoy i upewnij się, że poniższy komunikat to wyświetlane dla konkretnej usługi API powiązanej z konkretnym miejscem docelowym w tej sekcji Authorizing request:

    no targets: HOSTNAME:PORT
    

    Przykładowe dane wyjściowe logu debugowania:

    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)

    Powyższy przykład pokazuje, że kombinacja nazwy hosta i portu httpbin1:8080 nie znaleziono w usłudze API ENVOY-PRODUCT-1.

  3. Jeśli podczas autoryzacji żądania Adapter Apigee dla logów Envoy zawiera wpis z komunikatem no targets: HOSTNAME:PORT, to jest to przyczyny problemu. Jeśli nie, przejdź do Przyczyna: w nagłówku żądania brakuje klucza interfejsu API

Rozdzielczość

Jeśli docelowa nazwa hosta i port nie zostały dodane do usługi API, wykonaj wykonaj te czynności, aby rozwiązać problem:

  1. Zaloguj się w interfejsie Edge.
  2. W menu Opublikuj > API produktów, kliknij konkretny używany do konfigurowania adaptera Apigee dla Envoy.
  3. Na stronie Usługi API > Nazwa usługi, kliknij Edytuj.
  4. W panelu Cele usługi zdalnej Apigee dodaj docelową nazwę hosta i port i kliknij Save (Zapisz).

    Jeśli nie widzisz sekcji Cele usługi zdalnej Apigee w interfejsie, dodaj atrybut niestandardowy do produktu API za pomocą atrybutu wpisz nazwę apigee-remote-service-targets i dodaj Wartość HOSTNAME:PORT przy użyciu interfejsu Edge API. Na przykład:

    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. Po wykonaniu powyższego zadania monitoruj adapter Apigee dla logów Envoy i poczekaj na Adapter Apigee dla Envoy pobiera zaktualizowaną usługę API. Następnie wyślij inny interfejs API i poproś o weryfikację poprawki.

Przyczyna: brak klucza interfejsu API w nagłówku żądania

Ten błąd występuje, jeśli klucz interfejsu API nie jest przekazywany jako część nagłówków żądań.

Diagnostyka

Aby zdiagnozować problem, wykonaj te czynności:

  1. Włącz dzienniki debugowania w sposób opisany powyżej w kroku 2.
  2. Sprawdź adapter Apigee pod kątem logów Envoy i upewnij się, że wyświetla się [missing authentication] wiadomość pod nagłówkiem Authenticate error .

    Przykładowe dane wyjściowe logu debugowania:

    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

    Przykładowe dane wyjściowe widoczne powyżej zawierają komunikat [missing authentication]. Ten komunikat oznacza, że klucz interfejsu API nie jest przekazywany jako część nagłówek żądania.

  3. Jeśli Adapter Apigee dla logów Envoy zawiera wpis logu z komunikatem [missing authentication] w sekcji Authenticate error , to jest to przyczyna problemu. Jeśli nie, przejdź do Przyczyna: nieprawidłowy klucz interfejsu API.

Rozdzielczość

Jeśli błąd [missing authentication] pojawił się w Adapter Apigee dla logów Envoy. Aby rozwiązać problem, wykonaj te czynności:

  1. Sprawdź, czy klient wysłał klucz interfejsu API za pomocą nagłówka HTTP x-api-key w żądania do interfejsu API. Jeśli nie, poproś klienta o wysłanie klucza interfejsu API w nagłówku HTTP. x-api-key
  2. Sprawdź plik konfiguracji Apigee Adapter for Envoy i upewnij się, że domyślny klucz interfejsu API nazwa nagłówka x-api-key została zmieniona, na przykład:
    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: apigee-remote-service-envoy
      namespace: apigee
    data:
      config.yaml: |
        global:
          tls:
            ...
        tenant:
          ...
        auth:
          target_header: api-key
    

    W powyższym przykładzie domyślna nazwa nagłówka klucza interfejsu API została zmieniona na api-key W takim przypadku przekaż klucz interfejsu API w nagłówku. api-key

  3. Jeśli domyślna nazwa nagłówka klucza interfejsu API została zmieniona, poproś klienta o użycie zaktualizowanej nazwy Nazwa nagłówka klucza interfejsu API i wyślij kolejne żądanie do interfejsu API, aby sprawdzić, czy to rozwiąże problem.

Przyczyna: nieprawidłowy klucz interfejsu API

Ten błąd występuje, jeśli w nagłówku żądania zostanie przekazany nieprawidłowy klucz interfejsu API.

Diagnostyka

Aby zdiagnozować problem, wykonaj te czynności:

  1. Włącz dzienniki debugowania w sposób opisany powyżej w kroku 2.
  2. Sprawdź adapter Apigee dla logów Envoy i upewnij się, że wyświetla się komunikat [permission denied] w sekcji Authenticate error. Ta informacja jest zwykle wyświetlana po pobraniu klucza interfejsu API przez adapter, który jest wskazywany przez wiadomość fetchToken fetching: API_KEY.

    Przykładowe dane wyjściowe logu debugowania:

    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)
    

    W tym przykładzie klucz interfejsu API wysłany w żądaniu do interfejsu API był nieprawidłowy.

  3. Jeśli Adapter Apigee dla logów Envoy zawiera wpis logu z elementem [permission denied] w sekcji Authenticate error , oznacza to, że klucz interfejsu API przekazany w ramach żądania jest nieprawidłowy i jest przyczyną problemu. Jeśli nie, przejdź do Przyczyna: adapter Apigee do Envoy nie może się komunikować z serwerem proxy interfejsu API usługi zdalnej.

Rozdzielczość

Jeśli w sekcji Authenticate error w logach Apigee Adapter for Envoy zaobserwowano komunikat [permission denied], wykonaj opisane poniżej czynności aby rozwiązać problem:

  1. Porównaj klucz interfejsu API wysłany w żądaniu do interfejsu API z wartością klucza interfejsu API w połączono z usługą API.
  2. Jeśli klucz interfejsu API używany przez klienta jest nieprawidłowy, poproś klienta o przesłanie prawidłowego klucza.
  3. Jeśli klucz interfejsu API używany przez klienta jest prawidłowy i nadal widzisz Błąd 403. Aby dokładniej zbadać ten problem, skontaktuj się z zespołem pomocy Apigee Edge.

Przyczyna: adapter Apigee dla Envoy nie może komunikować się z serwerem proxy interfejsu API usługi zdalnej

Ten błąd występuje, jeśli Adapter Apigee dla Envoy nie może skomunikować się z pilotem serwer proxy interfejsu API usługi, jeśli skonfigurowany host usługi zdalnej jest nieprawidłowy.

Diagnostyka

Aby zdiagnozować problem, wykonaj te czynności:

  1. Włącz dzienniki debugowania w sposób opisany powyżej w kroku 2.
  2. Sprawdź adapter Apigee dla logów Envoy i upewnij się, że wyświetla się ten komunikat:

    Error retrieving products: REQUEST_URI: no such host
    

    Przykładowe dane wyjściowe logu debugowania:

    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
    

    W tym przykładzie Adapter Apigee dla Envoy nie mógł skomunikować się z serwer proxy interfejsu API usługi zdalnej, ponieważ nazwa hosta została podana w polu proxy interfejsu API zdalnego serwera Adres URL jest nieprawidłowy, na co wskazuje błąd no such host .

  3. Jeśli Adapter Apigee dla logów Envoy zawiera wpis logu z komunikatem no such host, jest to przyczyna problemu. Jeśli nie, przejdź do Przyczyna: serwer proxy Envoy nie może komunikować się z adapterem Apigee dla Envoy.

Rozdzielczość

Jeśli powyższe błędy są wyświetlane w adapterze Apigee dla logów Envoy, wykonaj te czynności: czynności, jakie należy wykonać, aby rozwiązać problem:

  1. Sprawdź plik konfiguracji Apigee Adapter for Envoy i upewnij się, że podana wartość Adres URL serwera proxy interfejsu API usługi zdalnej jest prawidłowy.

    Jeśli nie, zatrzymaj adapter Apigee dla Envoy, napraw URL serwera proxy interfejsu API usługi zdalnej w konfiguracji, uruchom adapter Apigee dla Envoy i wyślij kolejne żądanie do interfejsu API sprawdzić poprawkę.

    Przykładowa konfiguracja:

    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. Sprawdź, czy serwer proxy interfejsu API remote-service jest wdrożony w odpowiednim brzegu dla środowiska. Jeśli nie, wdróż serwer proxy interfejsu API remote-service w odpowiednim brzegu. i spróbuj jeszcze raz.
  3. Sprawdź połączenie sieciowe między adapterem Apigee dla Envoy a Punkt końcowy serwera proxy remote-service. Jeśli masz połączenie sieciowe – skontaktuj się z zespołem ds. sieci i spróbuj go rozwiązać.

Przyczyna: serwer proxy Envoy nie może komunikować się z adapterem Apigee dla Envoy

Diagnostyka

Aby zdiagnozować problem, wykonaj te czynności:

  1. Sprawdź, czy w Envoy są włączone logi debugowania. Jeśli nie, zatrzymaj Envoy i uruchom ją od nowa. włączenie logów debugowania. Następnie wyślij kolejne żądanie do interfejsu API.

    Wdrożenia samodzielne:

    envoy -c envoy-config.yaml -l debug
    

    Wdrożenia Kubernetes/Istio:

    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. Sprawdź adapter Apigee pod kątem logów Envoy i upewnij się, że jest w nim wpis z komunikatem:
    connecting to APIGEE_ENVOY_ADAPTER_HOST:5000
    

    po którym następuje znak:

    upstream connect error or disconnect/reset before headers. reset reason: ACTUAL_REASON
    

    Przykładowe dane wyjściowe logu debugowania:

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

    Powyższy przykład pokazuje, że Envoy nie mógł komunikować się z Adapter Apigee dla Envoy z powodu: connection failure.

  3. Przyczyny wystąpienia connection failure mogą być różne. Przyjrzyjmy się każdemu z tych scenariuszy.

Scenariusz 1. Proces adaptera nie jest uruchomiony

Ten błąd może wystąpić, jeśli proces adaptera Apigee dla Envoy nie działa.

  1. Sprawdź, czy proces adaptera Apigee dla Envoy działa, wykonując to . Jeśli działa proces adaptera Apigee dla Envoy, wynik poniższego powinna zawierać jego listę.
    ps -ef | grep apigee-remote-service-envoy
    
  2. Jeśli tak się nie dzieje, to właśnie jest przyczyną problemu.

Rozdzielczość

  1. Jeśli proces adaptacji Apigee dla Envoy nie jest uruchomiony, uruchom Adapter Apigee do Envoy.
  2. Wyślij kolejne żądanie do interfejsu API i sprawdź, czy problem został rozwiązany.

Scenariusz 2. Proces adaptera nie nasłuchuje na określonym porcie

Jeśli proces adaptacji Apigee dla Envoy nie nasłuchuje na konkretnym porcie, może wystąpić ten błąd.

Jeśli działa proces adaptera Apigee dla Envoy, sprawdź, czy gniazdo nasłuchuje port 5000: APIGEE_ENVOY_ADAPTER_HOST:5000. Możesz użyć Polecenie netstat, aby to sprawdzić:

sudo netstat -lnp | grep 5000

Przykładowe wyniki:

sudo netstat -lnp | grep 5000

tcp6       0      0 :::5000                 :::*                    LISTEN      1596530/./apigee-re

Jeśli na porcie 5000 nie ma gniazda nasłuchującego, może to być przyczyną tego problemu.

Rozdzielczość

  1. Zatrzymaj adapter Apigee dla Envoy i uruchom go ponownie.
  2. Wyślij kolejne żądanie do interfejsu API i sprawdź, czy problem został rozwiązany.

Scenariusz 3. Połączenie sieciowe między Envoy a adapterem Apigee dla Envoy

  1. Sprawdź połączenie sieciowe między Envoy a adapterem Apigee dla Envoy:
    ssh $ENVOY_HOST
    telnet $APIGEE_ENVOY_ADAPTER_HOST 5000

    Gdyby Telnet mógł nawiązać połączenie TCP z adapterem Apigee dla Envoy wyświetlą się dane wyjściowe podobne do tych:

    telnet $APIGEE_ENVOY_ADAPTER_HOST 5000
    
    Trying ::1...
    Connected to localhost.
    Escape character is '^]'.
    
  2. Jeśli podczas korzystania z usługi telnet występuje błąd Connection timed out, oznacza to, wystąpił problem z połączeniem sieciowym między Envoy a adapterem Apigee dla Envoy.

Rozdzielczość

Jeśli występują problemy z połączeniem sieciowym między Envoy a adapterem Apigee dla Envoy, skontaktuj się z zespołem ds. sieci i spróbuj rozwiązać problem.

Jeśli problem będzie nadal występował, wejdź na Konieczne jest zbieranie informacji diagnostycznych.

Musi zbierać informacje diagnostyczne

Jeśli po wykonaniu powyższych czynności problem nie ustąpi, przeprowadź następujące czynności diagnostyczne a następnie skontaktuj się z zespołem pomocy Apigee Edge:

  1. Używana usługa Apigee:

    Przykład: Apigee Edge Cloud, Apigee OPDK, Apigee hybrid, Apigee X

  2. Organizacja i środowisko Apigee
  3. Definicja usługi interfejsu API odczytywana za pomocą interfejsu Edge API:

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

    Materiały referencyjne: interfejsy API Apigee Edge

  4. Rozpocznij sesję śledzenia na serwerze proxy interfejsu API remote-service za pomocą Interfejs Apigee Edge. Odtwórz ten problem i udostępnij plik XML sesji śledzenia.

    Odniesienie: Korzystanie z narzędzia Trace | Apigee Edge

  5. Adapter Apigee dla logów Envoy (pełne logi związane z danym okresem)

    Wdrożenia samodzielne:

    # by default Apigee Envoy write logs to stdout and stderr, check your deployment configuration and collect logs accordingly
    

    Wdrożenia Kubernetes/Istio:

    kubectl -n=apigee get pods
    kubectl -n=apigee logs APIGEE_REMOTE_SERVICE_ENVOY_POD_NAME > apigee-remote-service-envoy.log
  6. Żądanie do interfejsu API wysłane do serwera proxy Envoy za pomocą polecenia curl (pełne dane wyjściowe polecenia curl):
    curl -v ENVOY_PROXY_ENDPOINT
  7. żądanie do interfejsu API wysłane do usługi docelowej za pomocą polecenia curl (pełne dane wyjściowe polecenia curl):
    curl -v TARGET_SERVICE_ENDPOINT