linkerd / linkerd/website

Missing edge from nginx ingress controller pod to GRPC backend

Open
#546 22 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

Dominant language
JavaScript
Stars
60
Forks
221
Avg merge
4h 32m
Merged PRs (30d)
1

Description

## Bug Report

### What is the issue?
I am using nginx ingress controller to allow external traffic into my cluster. When I run the command `linkerd edges po`, I see the edges from the nginx ingress controller pods to my internal services for all services that accept http1 traffic. However, the edges to the services using GRPC are do not appear on the list.

This doesn't seem to affect the traffic flow and all GRPC services seem to be getting the requests and serving them properly but it would be nice to have the edges for better tracing.

### How can it be reproduced?
Install nginx ingress controller from https://github.com/kubernetes/ingress-nginx into your mesh.
Setup a GRPC service and define an ingress which uses the ingress controller you installed.

run `linkerd edges po` - the edge from the nginx ingress controller pod to your app should not appear

### Logs, error output, etc

(If the output is long, please create a [gist](https://gist.github.com/) and
paste the link here.)

#### `linkerd check` output
```kubernetes-api
--------------
√ can initialize the client
√ can query the Kubernetes API

kubernetes-version
------------------
√ is running the minimum Kubernetes API version
√ is running the minimum kubectl version

linkerd-config
--------------
√ control plane Namespace exists
√ control plane ClusterRoles exist
√ control plane ClusterRoleBindings exist
√ control plane ServiceAccounts exist
√ control plane CustomResourceDefinitions exist
√ control plane MutatingWebhookConfigurations exist
√ control plane ValidatingWebhookConfigurations exist
√ control plane PodSecurityPolicies exist

linkerd-existence
-----------------
√ 'linkerd-config' config map exists
√ control plane replica sets are ready
√ no unschedulable pods
√ controller pod is running
√ can initialize the client
√ can query the control plane API

linkerd-api
-----------
√ control plane pods are ready
√ control plane self-check
√ [kubernetes] control plane can talk to Kubernetes
√ [prometheus] control plane can talk to Prometheus
√ no invalid service profiles

linkerd-version
---------------
√ can determine the latest version
√ cli is up-to-date

control-plane-version
---------------------
√ control plane is up-to-date
√ control plane and cli versions match

Status check results are √```

### Environment

- Kubernetes Version: 1.12.7-gke.25
- Cluster Environment: GKE
- Linkerd version: 2.5.0

### Additional context

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Reproduce the setup described with the nginx ingress controller, a gRPC service, and an ingress, then run `linkerd edges po` to inspect the missing edge. Trace how this command discovers HTTP/1 and gRPC connections; done means the nginx ingress controller pod-to-service edge appears for gRPC traffic without disrupting requests.

Written by the indexing model from the issue text.

Assessment

Tech stack
grpc, kubernetes, nginx
Domain
backend, networking, observability
Issue type
Bug
Difficulty
3/5
Estimated time
1-2 days
Activity status
Stale
Clarity
Mostly clear
Newbie friendliness
45/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.