Сервис Grpc не может получить запрос с linkerd - PullRequest
0 голосов
/ 20 декабря 2018

Я пытаюсь интегрировать Linkerd с моим сервисом grpc на kubernetes для проблемы с балансировкой нагрузки в соответствии с этой статьей , но мой сервис grpc не может получить какой-либо запрос при работе с Linkerd и зависает клиент grpc, выбрасываяне исключениеИ служба, и клиент являются приложением .Net Core и используют небезопасные учетные данные.

Я провел несколько тестов.Сервер grpc может работать без Linkerd, а Linkerd может работать с веб-интерфейсом ASP.NET Core.

Я следовал официальной инструкции: Начало работы и Добавление службы .Вот сгенерированный yaml:

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  creationTimestamp: null
  labels:
    app: demogrpc
  name: demogrpc
spec:
  replicas: 3
  selector:
    matchLabels:
      app: demogrpc
  strategy: {}
  template:
    metadata:
      annotations:
        linkerd.io/created-by: linkerd/cli stable-2.1.0
        linkerd.io/proxy-version: stable-2.1.0
      creationTimestamp: null
      labels:
        app: demogrpc
        linkerd.io/control-plane-ns: linkerd
        linkerd.io/proxy-deployment: demogrpc
    spec:
      containers:
      - env:
        - name: GRPC_HOST
          valueFrom:
            fieldRef:
              fieldPath: status.podIP
        - name: SERVICE_NAME
          valueFrom:
            fieldRef:
              fieldPath: metadata.name
        - name: GRPC_PORT
          value: "8000"
        image: 192.168.99.25:30000/demogrpchost:1.0.9
        imagePullPolicy: Always
        name: demogrpc
        resources: {}
      - env:
        - name: LINKERD2_PROXY_LOG
          value: warn,linkerd2_proxy=info
        - name: LINKERD2_PROXY_BIND_TIMEOUT
          value: 10s
        - name: LINKERD2_PROXY_CONTROL_URL
          value: tcp://linkerd-proxy-api.linkerd.svc.cluster.local:8086
        - name: LINKERD2_PROXY_CONTROL_LISTENER
          value: tcp://0.0.0.0:4190
        - name: LINKERD2_PROXY_METRICS_LISTENER
          value: tcp://0.0.0.0:4191
        - name: LINKERD2_PROXY_OUTBOUND_LISTENER
          value: tcp://127.0.0.1:4140
        - name: LINKERD2_PROXY_INBOUND_LISTENER
          value: tcp://0.0.0.0:4143
        - name: LINKERD2_PROXY_DESTINATION_PROFILE_SUFFIXES
          value: .
        - name: LINKERD2_PROXY_POD_NAMESPACE
          valueFrom:
            fieldRef:
              fieldPath: metadata.namespace
        image: gcr.io/linkerd-io/proxy:stable-2.1.0
        imagePullPolicy: IfNotPresent
        livenessProbe:
          httpGet:
            path: /metrics
            port: 4191
          initialDelaySeconds: 10
        name: linkerd-proxy
        ports:
        - containerPort: 4143
          name: linkerd-proxy
        - containerPort: 4191
          name: linkerd-metrics
        readinessProbe:
          httpGet:
            path: /metrics
            port: 4191
          initialDelaySeconds: 10
        resources: {}
        securityContext:
          runAsUser: 2102
        terminationMessagePolicy: FallbackToLogsOnError
      imagePullSecrets:
      - name: kubernetes-registry
      initContainers:
      - args:
        - --incoming-proxy-port
        - "4143"
        - --outgoing-proxy-port
        - "4140"
        - --proxy-uid
        - "2102"
        - --inbound-ports-to-ignore
        - 4190,4191
        image: gcr.io/linkerd-io/proxy-init:stable-2.1.0
        imagePullPolicy: IfNotPresent
        name: linkerd-init
        resources: {}
        securityContext:
          capabilities:
            add:
            - NET_ADMIN
          privileged: false
        terminationMessagePolicy: FallbackToLogsOnError
status: {}

А вот лог-сообщение от одного из линкер-прокси:

INFO linkerd2_proxy::app::main using controller at Some(Name(NameAddr { name: DnsName(DNSName("linkerd-proxy-api.linkerd.svc.cluster.local")), port: 8086 }))
INFO linkerd2_proxy::app::main routing on V4(127.0.0.1:4140)
INFO linkerd2_proxy::app::main proxying on V4(0.0.0.0:4143) to None
INFO linkerd2_proxy::app::main serving Prometheus metrics on V4(0.0.0.0:4191)
INFO linkerd2_proxy::app::main protocol detection disabled for inbound ports {25, 3306}
INFO linkerd2_proxy::app::main protocol detection disabled for outbound ports {25, 3306}
WARN 10.244.1.137:8000 linkerd2_proxy::proxy::reconnect connect error to Config { target: Target { addr: V4(10.244.1.137:8000), tls: None(InternalTraffic), _p: () }, settings: Http2, _p: () }: Connection refused (os error 111) (address: 127.0.0.1:8000)

Как мне заставить мой сервис grpc работать с Linkerd?Или есть лучшее решение для балансировки нагрузки службы grpc в kubernetes?

1 Ответ

0 голосов
/ 21 декабря 2018

Указав GRPC_HOST для 127.0.0.1, позволяет Linkerd подключаться к серверу grpc.Поскольку прокси-сервер линкера будет использовать адрес обратной связи для подключения к другим контейнерам, в данном случае это сервис grpc.

...