solo-io / gloo

The Feature-rich, Kubernetes-native, Next-Generation API Gateway Built on Envoy
https://docs.solo.io/
Apache License 2.0
4.09k stars 444 forks source link

Gloo Edge doesn't support a hybrid of gateway and knative profiles #4004

Closed murphye closed 4 months ago

murphye commented 3 years ago

Describe the bug Please see this comment: https://github.com/solo-io/gloo/issues/1544#issuecomment-547669320

I want to use both the Gateway (Virtual Services) and Knative together to route requests in a similar manner as described in https://github.com/solo-io/gloo/issues/1544

It is stated in the comment that you can "Simply install Gloo in gateway mode on top of the existing knative install (or vice versa): glooctl install gateway."

However, glooctl simple doesn't let you do that:

To Reproduce Steps to reproduce the behavior:

  1. glooctl install knative
  2. glooctl install gateway
  3. Error: installing gloo edge in gateway mode: Gloo has already been installed to namespace gloo-system

Expected behavior Installing the gateway is successful.

Additional context glooctl version Client: {"version":"1.5.14"}

murphye commented 3 years ago

I went through the Helm install to enable both Knative and Gateway, and see if that was possible rather than using glooctl. If I set knative.proxy.service.type=ClusterIP everything seems to deploy OK. With type=LoadBalancer the knative-proxy will not deploy.

(install Knative without Gloo)
glooctl install knative -g
kubectl create namespace gloo-system
helm install gloo gloo/gloo --namespace gloo-system \
  --set gateway.enabled=true,settings.integrations.knative.enabled=true,settings.integrations.knative.version=v0.10.0,settings.integrations.knative.proxy.service.type=ClusterIP
kubectl get all -n gloo-system

Result:

NAME                                          READY   STATUS    RESTARTS   AGE
pod/knative-internal-proxy-7cd8448b58-sm5gq   1/1     Running   0          35s
pod/knative-external-proxy-f4f67644d-5wpxt    1/1     Running   0          35s
pod/gateway-proxy-78669994ff-6rnvq            1/1     Running   0          35s
pod/svclb-gateway-proxy-z5d9q                 2/2     Running   0          35s
pod/ingress-6f7f8bdcd9-lk5ft                  1/1     Running   1          35s
pod/gloo-6d86dc87c8-rqx7r                     1/1     Running   1          35s
pod/discovery-5dc96cbb4d-dmjkl                1/1     Running   1          35s
pod/gateway-7fbfc6cb8f-w9lht                  1/1     Running   1          35s

NAME                             TYPE           CLUSTER-IP      EXTERNAL-IP   PORT(S)                               AGE
service/gloo                     ClusterIP      10.43.224.75    <none>        9977/TCP,9976/TCP,9988/TCP,9979/TCP   35s
service/knative-external-proxy   ClusterIP      10.43.41.29     <none>        80/TCP,443/TCP                        35s
service/knative-internal-proxy   ClusterIP      10.43.120.17    <none>        80/TCP,443/TCP                        35s
service/gateway                  ClusterIP      10.43.191.186   <none>        443/TCP                               35s
service/gateway-proxy            LoadBalancer   10.43.220.143   172.19.0.2    80:31162/TCP,443:30813/TCP            35s

NAME                                 DESIRED   CURRENT   READY   UP-TO-DATE   AVAILABLE   NODE SELECTOR   AGE
daemonset.apps/svclb-gateway-proxy   1         1         1       1            1           <none>          35s

NAME                                     READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/knative-internal-proxy   1/1     1            1           35s
deployment.apps/knative-external-proxy   1/1     1            1           35s
deployment.apps/gateway-proxy            1/1     1            1           35s
deployment.apps/ingress                  1/1     1            1           35s
deployment.apps/gloo                     1/1     1            1           35s
deployment.apps/discovery                1/1     1            1           35s
deployment.apps/gateway                  1/1     1            1           35s

NAME                                                DESIRED   CURRENT   READY   AGE
replicaset.apps/knative-internal-proxy-7cd8448b58   1         1         1       35s
replicaset.apps/knative-external-proxy-f4f67644d    1         1         1       35s
replicaset.apps/gateway-proxy-78669994ff            1         1         1       35s
replicaset.apps/ingress-6f7f8bdcd9                  1         1         1       35s
replicaset.apps/gloo-6d86dc87c8                     1         1         1       35s
replicaset.apps/discovery-5dc96cbb4d                1         1         1       35s
replicaset.apps/gateway-7fbfc6cb8f                  1         1         1       35s

However, there is a problem with the Knative service deployment (IngressNotConfigured):

kubectl apply --filename petstore.yaml
service.serving.knative.dev/petstore created 
kubectl get kservice                                                                                         
NAME       URL                                   LATESTCREATED    LATESTREADY      READY     REASON
petstore   http://petstore.default.example.com   petstore-2bqpg   petstore-2bqpg   Unknown   IngressNotConfigured
murphye commented 3 years ago

Just to provide some clarity around the use case, as documented in the referenced issue above, I'd be looking to do something like this:

apiVersion: gateway.solo.io/v1
kind: VirtualService
metadata:
  name: 'petstore'
  namespace: 'gloo-system'
spec:
  virtualHost:
    domains:
    - '*'
    routes:
    - matchers:
       - prefix: '/all-pets'
      routeAction:
        single:
          upstream:
            name: 'gloo-system-knative-internal-proxy-80'
            namespace: 'gloo-system'
      options:
        prefixRewrite: '/api/pets'
        hostRewrite: 'petstore.default.example.com'
status: {}
murphye commented 3 years ago

Related Issues: https://github.com/solo-io/gloo/issues/2410 https://github.com/solo-io/gloo/issues/2472

kdorosh commented 3 years ago

Hi @murphye . glooctl install knative and glooctl install gateway are meant to be default installations for simpler use cases. You can install both at the same time using glooctl or helm by providing the proper helm value overrides. For example, the following values.yaml:

gateway:
  enabled: true
settings:
  integrations:
    knative:
      enabled: false

and then glooctl install gateway -f values.yaml or helm install --values values.yaml

murphye commented 3 years ago

Hi @kdorosh Please check my above comment where I already ran the install via Helm. https://github.com/solo-io/gloo/issues/4004#issuecomment-747839059

This didn't seem to work please see the comment for the result. I feel there is still a problem here.

Also, I am unsure on how to actually route the requests from the gateway to knative once it's finally installed properly.

Thanks!

P.S. Can you please reopen this issue?

kdorosh commented 3 years ago

@murphye I see you tried the advice listed in https://github.com/solo-io/gloo/issues/1544#issuecomment-547669320 , this advice is now dated and doesn't work in later versions of glooctl or helm with their default install flows.

For the knative service with IngressNotConfigured, can you check the logs of the knative pods to see if they give hints as to any reason for the status?

For routing from the gateway using virtual services to a knative service using virtual services, we would need to implement https://github.com/solo-io/gloo/issues/2410. This ticket would become a duplicate of that one.

Today, knative services leverage the standard Ingress resource in Gloo: https://github.com/solo-io/gloo/blob/01d04751f72c168e304977c4f67fdbcbf30232a9/projects/knative/pkg/translator/translate.go#L76

murphye commented 3 years ago

Ok, after trying the Gloo + Knative deployment again, I no longer have the IngressNotConfigured error. So that is a positive.

murphye commented 3 years ago

Here is the result of using the upstream gloo-system-knative-external-proxy-80. Based on another comment here https://github.com/solo-io/gloo/issues/1544#issuecomment-547669320 it seems like this could work, but in the end I get a connection error.

curl localhost:8081/all-pets                          
upstream connect error or disconnect/reset before headers. reset reason: connection failure

Output from glooctl proxy logs -f

[2020-12-19 03:50:36.735][35][debug][http] [external/envoy/source/common/http/conn_manager_impl.cc:837] [C46][S1580053177023262159] request headers complete (end_stream=true):
':authority', 'localhost:8081'
':path', '/all-pets'
':method', 'GET'
'user-agent', 'curl/7.64.1'
'accept', '*/*'

[2020-12-19 03:50:36.735][35][debug][http] [external/envoy/source/common/http/filter_manager.cc:721] [C46][S1580053177023262159] request end stream
[2020-12-19 03:50:36.735][35][debug][router] [external/envoy/source/common/router/router.cc:429] [C46][S1580053177023262159] cluster 'gloo-system-knative-external-proxy-80_gloo-system' match for URL '/all-pets'
[2020-12-19 03:50:36.735][35][debug][router] [external/envoy/source/common/router/router.cc:586] [C46][S1580053177023262159] router decoding headers:
':authority', 'petstore.default.example.com'
':path', '/api/pets'
':method', 'GET'
':scheme', 'http'
'user-agent', 'curl/7.64.1'
'accept', '*/*'
'x-forwarded-proto', 'http'
'x-request-id', '736025e0-3346-438f-ab58-b39af213ac38'
'x-envoy-expected-rq-timeout-ms', '15000'
'x-envoy-original-path', '/all-pets'

[2020-12-19 03:50:36.736][35][debug][pool] [external/envoy/source/common/http/conn_pool_base.cc:71] queueing stream due to no available connections
[2020-12-19 03:50:36.736][35][debug][pool] [external/envoy/source/common/conn_pool/conn_pool_base.cc:104] creating a new connection
[2020-12-19 03:50:36.736][35][debug][client] [external/envoy/source/common/http/codec_client.cc:39] [C47] connecting
[2020-12-19 03:50:36.736][35][debug][connection] [external/envoy/source/common/network/connection_impl.cc:769] [C47] connecting to 10.42.0.17:8080
[2020-12-19 03:50:36.737][35][debug][connection] [external/envoy/source/common/network/connection_impl.cc:785] [C47] connection in progress
[2020-12-19 03:50:36.737][35][debug][connection] [external/envoy/source/common/network/connection_impl.cc:634] [C47] delayed connection error: 111
[2020-12-19 03:50:36.738][35][debug][connection] [external/envoy/source/common/network/connection_impl.cc:203] [C47] closing socket: 0
[2020-12-19 03:50:36.738][35][debug][client] [external/envoy/source/common/http/codec_client.cc:96] [C47] disconnect. resetting 0 pending requests
[2020-12-19 03:50:36.738][35][debug][pool] [external/envoy/source/common/conn_pool/conn_pool_base.cc:314] [C47] client disconnected, failure reason: 
[2020-12-19 03:50:36.739][35][debug][router] [external/envoy/source/common/router/router.cc:1031] [C46][S1580053177023262159] upstream reset: reset reason: connection failure, transport failure reason: 
[2020-12-19 03:50:36.739][35][debug][http] [external/envoy/source/common/http/filter_manager.cc:805] [C46][S1580053177023262159] Sending local reply with details upstream_reset_before_response_started{connection failure}
[2020-12-19 03:50:36.739][35][debug][http] [external/envoy/source/common/http/conn_manager_impl.cc:1435] [C46][S1580053177023262159] encoding headers via codec (end_stream=false):
':status', '503'
'content-length', '91'
'content-type', 'text/plain'
'date', 'Sat, 19 Dec 2020 03:50:36 GMT'
'server', 'envoy'

Here is the exact error from the log above:

[2020-12-19 03:50:36.739][35][debug][router] [external/envoy/source/common/router/router.cc:1031] [C46][S1580053177023262159] upstream reset: reset reason: connection failure, transport failure reason: 
[2020-12-19 03:50:36.739][35][debug][http] [external/envoy/source/common/http/filter_manager.cc:805] [C46][S1580053177023262159] Sending local reply with details upstream_reset_before_response_started{connection failure}
glooctl get upstream gloo-system-knative-external-proxy-80
+---------------------------------------+------------+----------+--------------------------------+
|               UPSTREAM                |    TYPE    |  STATUS  |            DETAILS             |
+---------------------------------------+------------+----------+--------------------------------+
| gloo-system-knative-external-proxy-80 | Kubernetes | Accepted | svc name:                      |
|                                       |            |          | knative-external-proxy         |
|                                       |            |          | svc namespace: gloo-system     |
|                                       |            |          | port:          80              |
|                                       |            |          |                                |
+---------------------------------------+------------+----------+--------------------------------+

From the logs above, it is pointing to the right IP, 10.42.0.17.

kubectl get pod -o wide -n gloo-system
NAME                                      READY   STATUS    RESTARTS   AGE     IP           NODE                       NOMINATED NODE   READINESS GATES
knative-external-proxy-f4f67644d-xwf88    1/1     Running   0          3h55m   10.42.0.17   k3d-k3s-default-server-0   <none>           <none>

From log above:

[2020-12-19 03:50:36.736][35][debug][connection] [external/envoy/source/common/network/connection_impl.cc:769] [C47] connecting to 10.42.0.17:8080

Running at 10.42.0.17:8080, so everything should be OK as seen below with the Pod definition... hmmm

kubectl describe pod knative-external-proxy-f4f67644d-xwf88 -n gloo-system
Name:         knative-external-proxy-f4f67644d-xwf88
Namespace:    gloo-system
Priority:     0
Node:         k3d-k3s-default-server-0/172.18.0.2
Start Time:   Fri, 18 Dec 2020 16:15:32 -0800
Labels:       gloo=knative-external-proxy
              pod-template-hash=f4f67644d
Annotations:  <none>
Status:       Running
IP:           10.42.0.17
IPs:
  IP:           10.42.0.17
Controlled By:  ReplicaSet/knative-external-proxy-f4f67644d
Containers:
  knative-external-proxy:
    Container ID:  containerd://9fa5c84d25a3e1dc9aabc8b58db66ef68b131d5ace39ecb641a2b88a55bdce10
    Image:         quay.io/solo-io/gloo-envoy-wrapper:1.5.14
    Image ID:      quay.io/solo-io/gloo-envoy-wrapper@sha256:6df86b35d2bbfec779a6cb52e212527547a8bb109d966488810c8379877a9d16
    Ports:         8080/TCP, 8443/TCP
    Host Ports:    0/TCP, 0/TCP
    Args:
      --disable-hot-restart
    State:          Running
      Started:      Fri, 18 Dec 2020 16:15:55 -0800
    Ready:          True
    Restart Count:  0
    Environment:
      POD_NAMESPACE:  gloo-system (v1:metadata.namespace)
      POD_NAME:       knative-external-proxy-f4f67644d-xwf88 (v1:metadata.name)
    Mounts:
      /etc/envoy from envoy-config (rw)
      /var/run/secrets/kubernetes.io/serviceaccount from default-token-v26b9 (ro)
Conditions:
  Type              Status
  Initialized       True 
  Ready             True 
  ContainersReady   True 
  PodScheduled      True 
Volumes:
  envoy-config:
    Type:      ConfigMap (a volume populated by a ConfigMap)
    Name:      knative-external-proxy-config
    Optional:  false
  default-token-v26b9:
    Type:        Secret (a volume populated by a Secret)
    SecretName:  default-token-v26b9
    Optional:    false
QoS Class:       BestEffort
Node-Selectors:  <none>
Tolerations:     node.kubernetes.io/not-ready:NoExecute op=Exists for 300s
                 node.kubernetes.io/unreachable:NoExecute op=Exists for 300s
Events:          <none>
murphye commented 3 years ago

Getting some warnings/errors in the knative-external-proxy logs. Also it seems to be rejecting any connections on port 8080, which explains the connection failure error in the logs in the previous comment.

kubectl logs knative-external-proxy-f4f67644d-xwf88 -n gloo-system
[2020-12-19 00:15:55.697][8][info][main] [external/envoy/source/server/server.cc:305] initializing epoch 0 (base id=0, hot restart version=disabled)
[2020-12-19 00:15:55.697][8][info][main] [external/envoy/source/server/server.cc:307] statically linked extensions:
[2020-12-19 00:15:55.697][8][info][main] [external/envoy/source/server/server.cc:309]   envoy.dubbo_proxy.filters: envoy.filters.dubbo.router
[2020-12-19 00:15:55.697][8][info][main] [external/envoy/source/server/server.cc:309]   envoy.filters.listener: envoy.filters.listener.http_inspector, envoy.filters.listener.original_dst, envoy.filters.listener.original_src, envoy.filters.listener.proxy_protocol, envoy.filters.listener.tls_inspector, envoy.listener.http_inspector, envoy.listener.original_dst, envoy.listener.original_src, envoy.listener.proxy_protocol, envoy.listener.tls_inspector
[2020-12-19 00:15:55.697][8][info][main] [external/envoy/source/server/server.cc:309]   envoy.http.cache: envoy.extensions.http.cache.simple
[2020-12-19 00:15:55.697][8][info][main] [external/envoy/source/server/server.cc:309]   envoy.udp_listeners: raw_udp_listener
[2020-12-19 00:15:55.697][8][info][main] [external/envoy/source/server/server.cc:309]   envoy.bootstrap: envoy.extensions.network.socket_interface.default_socket_interface
[2020-12-19 00:15:55.697][8][info][main] [external/envoy/source/server/server.cc:309]   envoy.dubbo_proxy.route_matchers: default
[2020-12-19 00:15:55.697][8][info][main] [external/envoy/source/server/server.cc:309]   envoy.udp_packet_writers: udp_default_writer
[2020-12-19 00:15:55.698][8][info][main] [external/envoy/source/server/server.cc:309]   envoy.resolvers: envoy.ip
[2020-12-19 00:15:55.698][8][info][main] [external/envoy/source/server/server.cc:309]   envoy.grpc_credentials: envoy.grpc_credentials.aws_iam, envoy.grpc_credentials.default, envoy.grpc_credentials.file_based_metadata
[2020-12-19 00:15:55.698][8][info][main] [external/envoy/source/server/server.cc:309]   envoy.access_loggers: envoy.access_loggers.file, envoy.access_loggers.http_grpc, envoy.access_loggers.tcp_grpc, envoy.file_access_log, envoy.http_grpc_access_log, envoy.tcp_grpc_access_log
[2020-12-19 00:15:55.698][8][info][main] [external/envoy/source/server/server.cc:309]   envoy.dubbo_proxy.serializers: dubbo.hessian2
[2020-12-19 00:15:55.698][8][info][main] [external/envoy/source/server/server.cc:309]   envoy.guarddog_actions: envoy.watchdog.profile_action
[2020-12-19 00:15:55.698][8][info][main] [external/envoy/source/server/server.cc:309]   envoy.compression.decompressor: envoy.compression.gzip.decompressor
[2020-12-19 00:15:55.698][8][info][main] [external/envoy/source/server/server.cc:309]   envoy.clusters: envoy.cluster.eds, envoy.cluster.logical_dns, envoy.cluster.original_dst, envoy.cluster.static, envoy.cluster.strict_dns, envoy.clusters.aggregate, envoy.clusters.dynamic_forward_proxy, envoy.clusters.redis
[2020-12-19 00:15:55.698][8][info][main] [external/envoy/source/server/server.cc:309]   envoy.dubbo_proxy.protocols: dubbo
[2020-12-19 00:15:55.698][8][info][main] [external/envoy/source/server/server.cc:309]   envoy.thrift_proxy.protocols: auto, binary, binary/non-strict, compact, twitter
[2020-12-19 00:15:55.698][8][info][main] [external/envoy/source/server/server.cc:309]   envoy.upstreams: envoy.filters.connection_pools.http.generic, envoy.filters.connection_pools.http.http, envoy.filters.connection_pools.http.tcp
[2020-12-19 00:15:55.698][8][info][main] [external/envoy/source/server/server.cc:309]   envoy.retry_priorities: envoy.retry_priorities.previous_priorities
[2020-12-19 00:15:55.698][8][info][main] [external/envoy/source/server/server.cc:309]   envoy.compression.compressor: envoy.compression.gzip.compressor
[2020-12-19 00:15:55.698][8][info][main] [external/envoy/source/server/server.cc:309]   envoy.transport_sockets.downstream: envoy.transport_sockets.alts, envoy.transport_sockets.quic, envoy.transport_sockets.raw_buffer, envoy.transport_sockets.tap, envoy.transport_sockets.tls, raw_buffer, tls
[2020-12-19 00:15:55.699][8][info][main] [external/envoy/source/server/server.cc:309]   envoy.health_checkers: envoy.health_checkers.redis
[2020-12-19 00:15:55.699][8][info][main] [external/envoy/source/server/server.cc:309]   envoy.filters.udp_listener: envoy.filters.udp.dns_filter, envoy.filters.udp_listener.udp_proxy
[2020-12-19 00:15:55.699][8][info][main] [external/envoy/source/server/server.cc:309]   envoy.resource_monitors: envoy.resource_monitors.fixed_heap, envoy.resource_monitors.injected_resource
[2020-12-19 00:15:55.699][8][info][main] [external/envoy/source/server/server.cc:309]   envoy.filters.network: envoy.client_ssl_auth, envoy.echo, envoy.ext_authz, envoy.filters.network.client_ssl_auth, envoy.filters.network.direct_response, envoy.filters.network.dubbo_proxy, envoy.filters.network.echo, envoy.filters.network.ext_authz, envoy.filters.network.http_connection_manager, envoy.filters.network.kafka_broker, envoy.filters.network.local_ratelimit, envoy.filters.network.mongo_proxy, envoy.filters.network.mysql_proxy, envoy.filters.network.postgres_proxy, envoy.filters.network.ratelimit, envoy.filters.network.rbac, envoy.filters.network.redis_proxy, envoy.filters.network.rocketmq_proxy, envoy.filters.network.sni_cluster, envoy.filters.network.sni_dynamic_forward_proxy, envoy.filters.network.tcp_proxy, envoy.filters.network.thrift_proxy, envoy.filters.network.zookeeper_proxy, envoy.http_connection_manager, envoy.mongo_proxy, envoy.ratelimit, envoy.redis_proxy, envoy.tcp_proxy
[2020-12-19 00:15:55.699][8][info][main] [external/envoy/source/server/server.cc:309]   envoy.transport_sockets.upstream: envoy.transport_sockets.alts, envoy.transport_sockets.quic, envoy.transport_sockets.raw_buffer, envoy.transport_sockets.tap, envoy.transport_sockets.tls, raw_buffer, tls
[2020-12-19 00:15:55.699][8][info][main] [external/envoy/source/server/server.cc:309]   envoy.thrift_proxy.transports: auto, framed, header, unframed
[2020-12-19 00:15:55.699][8][info][main] [external/envoy/source/server/server.cc:309]   envoy.stats_sinks: envoy.dog_statsd, envoy.metrics_service, envoy.stat_sinks.dog_statsd, envoy.stat_sinks.hystrix, envoy.stat_sinks.metrics_service, envoy.stat_sinks.statsd, envoy.statsd
[2020-12-19 00:15:55.699][8][info][main] [external/envoy/source/server/server.cc:309]   envoy.thrift_proxy.filters: envoy.filters.thrift.rate_limit, envoy.filters.thrift.router
[2020-12-19 00:15:55.699][8][info][main] [external/envoy/source/server/server.cc:309]   envoy.filters.http: envoy.buffer, envoy.cors, envoy.csrf, envoy.ext_authz, envoy.fault, envoy.filters.http.adaptive_concurrency, envoy.filters.http.admission_control, envoy.filters.http.aws_lambda, envoy.filters.http.aws_request_signing, envoy.filters.http.buffer, envoy.filters.http.cache, envoy.filters.http.compressor, envoy.filters.http.cors, envoy.filters.http.csrf, envoy.filters.http.decompressor, envoy.filters.http.dynamic_forward_proxy, envoy.filters.http.dynamo, envoy.filters.http.ext_authz, envoy.filters.http.fault, envoy.filters.http.grpc_http1_bridge, envoy.filters.http.grpc_http1_reverse_bridge, envoy.filters.http.grpc_json_transcoder, envoy.filters.http.grpc_stats, envoy.filters.http.grpc_web, envoy.filters.http.gzip, envoy.filters.http.header_to_metadata, envoy.filters.http.health_check, envoy.filters.http.ip_tagging, envoy.filters.http.jwt_authn, envoy.filters.http.lua, envoy.filters.http.oauth, envoy.filters.http.on_demand, envoy.filters.http.original_src, envoy.filters.http.ratelimit, envoy.filters.http.rbac, envoy.filters.http.router, envoy.filters.http.squash, envoy.filters.http.tap, envoy.grpc_http1_bridge, envoy.grpc_json_transcoder, envoy.grpc_web, envoy.gzip, envoy.health_check, envoy.http_dynamo_filter, envoy.ip_tagging, envoy.lua, envoy.rate_limit, envoy.router, envoy.squash, io.solo.aws_lambda, io.solo.nats_streaming, io.solo.transformation
[2020-12-19 00:15:55.699][8][info][main] [external/envoy/source/server/server.cc:309]   envoy.internal_redirect_predicates: envoy.internal_redirect_predicates.allow_listed_routes, envoy.internal_redirect_predicates.previous_routes, envoy.internal_redirect_predicates.safe_cross_scheme
[2020-12-19 00:15:55.699][8][info][main] [external/envoy/source/server/server.cc:309]   envoy.retry_host_predicates: envoy.retry_host_predicates.omit_canary_hosts, envoy.retry_host_predicates.omit_host_metadata, envoy.retry_host_predicates.previous_hosts
[2020-12-19 00:15:55.699][8][info][main] [external/envoy/source/server/server.cc:309]   envoy.tracers: envoy.dynamic.ot, envoy.lightstep, envoy.tracers.datadog, envoy.tracers.dynamic_ot, envoy.tracers.lightstep, envoy.tracers.opencensus, envoy.tracers.xray, envoy.tracers.zipkin, envoy.zipkin
[2020-12-19 00:15:55.716][8][info][main] [external/envoy/source/server/server.cc:325] HTTP header map info:
[2020-12-19 00:15:55.717][8][warning][runtime] [external/envoy/source/common/runtime/runtime_features.cc:31] Unable to use runtime singleton for feature envoy.http.headermap.lazy_map_min_size
[2020-12-19 00:15:55.717][8][warning][runtime] [external/envoy/source/common/runtime/runtime_features.cc:31] Unable to use runtime singleton for feature envoy.http.headermap.lazy_map_min_size
[2020-12-19 00:15:55.718][8][warning][runtime] [external/envoy/source/common/runtime/runtime_features.cc:31] Unable to use runtime singleton for feature envoy.http.headermap.lazy_map_min_size
[2020-12-19 00:15:55.719][8][warning][runtime] [external/envoy/source/common/runtime/runtime_features.cc:31] Unable to use runtime singleton for feature envoy.http.headermap.lazy_map_min_size
[2020-12-19 00:15:55.719][8][info][main] [external/envoy/source/server/server.cc:328]   request header map: 600 bytes: :authority,:method,:path,:protocol,:scheme,accept,accept-encoding,access-control-request-method,authorization,cache-control,connection,content-encoding,content-length,content-type,expect,grpc-accept-encoding,grpc-timeout,if-match,if-modified-since,if-none-match,if-range,if-unmodified-since,keep-alive,origin,pragma,proxy-connection,referer,te,transfer-encoding,upgrade,user-agent,via,x-client-trace-id,x-envoy-attempt-count,x-envoy-decorator-operation,x-envoy-downstream-service-cluster,x-envoy-downstream-service-node,x-envoy-expected-rq-timeout-ms,x-envoy-external-address,x-envoy-force-trace,x-envoy-hedge-on-per-try-timeout,x-envoy-internal,x-envoy-ip-tags,x-envoy-max-retries,x-envoy-original-path,x-envoy-original-url,x-envoy-retriable-header-names,x-envoy-retriable-status-codes,x-envoy-retry-grpc-on,x-envoy-retry-on,x-envoy-upstream-alt-stat-name,x-envoy-upstream-rq-per-try-timeout-ms,x-envoy-upstream-rq-timeout-alt-response,x-envoy-upstream-rq-timeout-ms,x-forwarded-client-cert,x-forwarded-for,x-forwarded-proto,x-ot-span-context,x-request-id
[2020-12-19 00:15:55.719][8][info][main] [external/envoy/source/server/server.cc:328]   request trailer map: 128 bytes: 
[2020-12-19 00:15:55.719][8][info][main] [external/envoy/source/server/server.cc:328]   response header map: 424 bytes: :status,access-control-allow-credentials,access-control-allow-headers,access-control-allow-methods,access-control-allow-origin,access-control-expose-headers,access-control-max-age,age,cache-control,connection,content-encoding,content-length,content-type,date,etag,expires,grpc-message,grpc-status,keep-alive,last-modified,location,proxy-connection,server,transfer-encoding,upgrade,vary,via,x-envoy-attempt-count,x-envoy-decorator-operation,x-envoy-degraded,x-envoy-immediate-health-check-fail,x-envoy-ratelimited,x-envoy-upstream-canary,x-envoy-upstream-healthchecked-cluster,x-envoy-upstream-service-time,x-request-id
[2020-12-19 00:15:55.719][8][info][main] [external/envoy/source/server/server.cc:328]   response trailer map: 152 bytes: grpc-message,grpc-status
[2020-12-19 00:15:55.722][8][info][main] [external/envoy/source/server/server.cc:448] admin address: 127.0.0.1:19000
[2020-12-19 00:15:55.726][8][info][main] [external/envoy/source/server/server.cc:583] runtime: layers:
  - name: base
    static_layer:
      {}
  - name: admin
    admin_layer:
      {}
[2020-12-19 00:15:55.726][8][info][config] [external/envoy/source/server/configuration_impl.cc:95] loading tracing configuration
[2020-12-19 00:15:55.726][8][info][config] [external/envoy/source/server/configuration_impl.cc:70] loading 0 static secret(s)
[2020-12-19 00:15:55.726][8][info][config] [external/envoy/source/server/configuration_impl.cc:76] loading 2 cluster(s)
[2020-12-19 00:15:55.734][8][warning][config] [bazel-out/k8-opt/bin/external/envoy/source/common/config/_virtual_includes/grpc_stream_lib/common/config/grpc_stream.h:101] StreamAggregatedResources gRPC config stream closed: 14, no healthy upstream
[2020-12-19 00:15:55.734][8][warning][config] [bazel-out/k8-opt/bin/external/envoy/source/common/config/_virtual_includes/grpc_stream_lib/common/config/grpc_stream.h:63] Unable to establish new stream
[2020-12-19 00:15:55.734][8][info][config] [external/envoy/source/server/configuration_impl.cc:80] loading 0 listener(s)
[2020-12-19 00:15:55.734][8][info][config] [external/envoy/source/server/configuration_impl.cc:121] loading stats sink configuration
[2020-12-19 00:15:55.735][8][info][main] [external/envoy/source/server/server.cc:679] starting main dispatch loop
[2020-12-19 00:15:55.739][8][info][runtime] [external/envoy/source/common/runtime/runtime_impl.cc:421] RTDS has finished initialization
[2020-12-19 00:15:55.739][8][info][upstream] [external/envoy/source/common/upstream/cluster_manager_impl.cc:174] cm init: initializing cds
[2020-12-19 00:15:55.739][8][warning][main] [external/envoy/source/server/server.cc:565] there is no configured limit to the number of allowed active connections. Set a limit via the runtime key overload.global_downstream_max_connections
[2020-12-19 00:15:57.550][8][warning][config] [bazel-out/k8-opt/bin/external/envoy/source/common/config/_virtual_includes/grpc_stream_lib/common/config/grpc_stream.h:101] StreamAggregatedResources gRPC config stream closed: 14, upstream connect error or disconnect/reset before headers. reset reason: connection failure
[2020-12-19 00:15:58.958][8][warning][config] [bazel-out/k8-opt/bin/external/envoy/source/common/config/_virtual_includes/grpc_stream_lib/common/config/grpc_stream.h:101] StreamAggregatedResources gRPC config stream closed: 14, upstream connect error or disconnect/reset before headers. reset reason: connection failure
[2020-12-19 00:16:03.298][8][info][upstream] [external/envoy/source/common/upstream/cds_api_impl.cc:64] cds: add 0 cluster(s), remove 2 cluster(s)
[2020-12-19 00:16:03.298][8][info][upstream] [external/envoy/source/common/upstream/cluster_manager_impl.cc:178] cm init: all clusters initialized
[2020-12-19 00:16:03.299][8][info][main] [external/envoy/source/server/server.cc:660] all clusters initialized. initializing init manager
[2020-12-19 00:16:03.300][8][info][config] [external/envoy/source/server/listener_manager_impl.cc:888] all dependencies initialized. starting workers
[2020-12-19 00:31:02.640][8][info][main] [external/envoy/source/server/drain_manager_impl.cc:70] shutting down parent after drain

This one looks interesting:

[2020-12-19 00:15:58.958][8][warning][config] [bazel-out/k8-opt/bin/external/envoy/source/common/config/_virtual_includes/grpc_stream_lib/common/config/grpc_stream.h:101] StreamAggregatedResources gRPC config stream closed: 14, upstream connect error or disconnect/reset before headers. reset reason: connection failure

Update: After installing Knative without Gateway, knative-external-proxy contains the same warnings/errors but remains functional. So this seems to be unrelated to the connection issue.

murphye commented 3 years ago

I ran two separate Gloo installs (Knative and Gateway+Knative) and want to check connectivity to knative-external-proxy 8080 in each scenario. I sh into the ingress pods on each and run wget.

Knative knative-external-proxy

I am able to connect to knative-external-proxy 8080 and return a 404, which is the expected result. This is OK.

kubectl exec --stdin --tty ingress-6f95fd7dc-67rwj -n gloo-system -- /bin/sh
/ $ wget 10.42.0.12:8080
Connecting to 10.42.0.12:8080 (10.42.0.12:8080)
wget: server returned error: HTTP/1.1 404 Not Found

Gateway+Knative knative-external-proxy

In this scenario, the connection is refused from knative-external-proxy 8080. This is bad, and I am not yet sure why this is happening.

kubectl exec --stdin --tty ingress-6f7f8bdcd9-fpqbz -n gloo-system -- /bin/sh
/ $ wget 10.42.0.6:8080
Connecting to 10.42.0.6:8080 (10.42.0.6:8080)
wget: can't connect to remote host (10.42.0.6): Connection refused

There seems to be some deeper issue where the knative proxy are possibly not being configured correctly in the Gateway+Knative scenario. The logs do not have any obvious errors that would cause this issue.

murphye commented 3 years ago

@kdorosh Do you have any thoughts on why knative-external-proxy is not responding when installed in tandem with the gateway? See the previous comment. Is there a possibility that configuration is not being pushed down to the proxy?

Thanks!

github-actions[bot] commented 10 months ago

This issue has been marked as stale because of no activity in the last 180 days. It will be closed in the next 180 days unless it is tagged "no stalebot" or other activity occurs.

github-actions[bot] commented 4 months ago

This issue has been closed due to no activity in the last 12 months.