Подключитесь к серверу gRPC, запущенному на другом модуле - PullRequest
0 голосов
/ 04 октября 2019

У меня есть локальный клиент и сервер gRPC, и я могу общаться через них через HTTP2 через localhost. Но когда приложения развертываются в среде разработки с использованием Kubernetes и Docker, я не могу вызвать сервер gRPC из клиентского приложения.

Я подключаюсь к клиенту, используя этот код:

ManagedChannel managedChannel = ManagedChannelBuilder.forAddress(host, port).usePlaintext().build();

В DEV: Вот мой application.yml из серверного приложения.

grpc:
  port: 6565
  enabled: true

У меня сервер gRPC работает на порту 6565, поэтому я изменил следующее в клиентском приложении. yml также

taxgRPC:
  host: bpstax-ws.g-dev4.svc.rnq.k8s.copart.com
  port: 6565  

Когда мой клиент вызывает сервер, сервер не получает никаких входящих запросов, и клиент терпит неудачу, выдавая следующее исключение:

Caused by: io.grpc.netty.shaded.io.netty.channel.AbstractChannel$AnnotatedConnectException: Connection refused: no further information: bpstax-ws.g-dev4.svc.rnq.k8s.copart.com/10.148.2.194:6565

Когда я захожу вЯ вижу, что порт слушает сервер gRPC.

[dedas@rndcks401 ~]$ kubectl exec -ti bpstax-g-dev4-v029-74mj2 -n g-dev4 -- bash
bash-4.1$ netstat -tlnp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address               Foreign Address             State       PID/Program name
tcp        0      0 0.0.0.0:6565                0.0.0.0:*                   LISTEN      1/java
tcp        0      0 0.0.0.0:38957               0.0.0.0:*                   LISTEN      1/java
tcp        0      0 0.0.0.0:8080                0.0.0.0:*                   LISTEN      1/java
tcp        0      0 0.0.0.0:8081                0.0.0.0:*                   LISTEN      1/java

Мне нужна помощь по подключению к этому серверу gRPC. Пожалуйста, дайте мне знать, если требуются какие-либо пояснения / код.

1 Ответ

0 голосов
/ 04 октября 2019

Полагаю, вы должны предоставить правильный хост вашему клиенту gRPC. В вашей среде k8s лучший способ узнать IP-адрес вашего модуля сервера - хотя безголовый сервис .

Пример определения:

apiVersion: v1
kind: Service
metadata:
  labels:
    app: server
  name: server-headless
  namespace: <YOUR_NAMESPACE>
spec:
  clusterIP: None
  ports:
  - name: tcp
    port: 6565
    protocol: TCP
    targetPort: 6565
  selector:
    app: <SERVER_POD_LABEL>
  type: ClusterIP

Наличие автономного сервиса для вашегоСерверное приложение вы можете использовать полное доменное имя службы в качестве хоста. Таким образом, вы можете быть уверены, что полное доменное имя службы всегда разрешается в правильные ip / s модуля.

...