Служба C# GRPC в Kubernetes

У меня есть служба GRPC, написанная на C# с использованием ядра .net, развернутого в Kubernetes с фланелью в качестве CNI. Когда я пытаюсь подключиться к этой службе GRPC из другого контейнера, развернутого в том же кластере с использованием service: 9000, я получаю статус (StatusCode = Unavailable, Detail = \ "Connect Failed \").

Проверил локально на своей машине без контейнеров и k8s, все нормально работает.

Мое развертывание yaml для этой службы выглядит так:

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  finalizers:
  - kubernetes.io/pvc-protection
  name: service-pvc
  namespace: services
spec:
  accessModes:
  - ReadWriteOnce
  - ReadOnlyMany
  - ReadWriteMany
  resources:
    requests:
      storage: 1Gi
  storageClassName: ""
  volumeName: nfs-service
---
apiVersion: apps/v1beta2
kind: Deployment
metadata:
  name: service-deployment
  labels:
    app: service
  name: service
  namespace: services
spec:
  selector:
    matchLabels:
      app: service
  replicas: 1
  template:
    metadata:
      labels:
        app: service
    spec:
      containers:
        image: <ImageUrl>
        imagePullPolicy: Always
        name: service  
        ports:
        - containerPort: 9000
          name: service
          protocol: TCP
        securityContext:
          allowPrivilegeEscalation: false
          privileged: false
          readOnlyRootFilesystem: false
          runAsNonRoot: false
        stdin: true
        terminationMessagePath: /dev/termination-log
        terminationMessagePolicy: File
        tty: true
        volumeMounts:
        - mountPath: /var/certs/
          name: service-vol1
          readOnly: true
          subPath: service
      dnsPolicy: ClusterFirst
      restartPolicy: Always
      schedulerName: default-scheduler
      terminationGracePeriodSeconds: 30
      imagePullSecrets:
      - name: unstable      
      volumes:
      - name: service-vol1
        persistentVolumeClaim:
          claimName: service-pvc
---
apiVersion: v1
kind: Service
metadata:
  name: service
  namespace: services
spec:
  selector:
    app: service
  ports:
  - port: 9000
    targetPort: service

Пожалуйста помоги.

=======

Наблюдение: когда я запускал netstat -tulpn в оболочке контейнера, он давал повторяющиеся записи в состоянии прослушивания.

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:9000            0.0.0.0:*               LISTEN      1/dotnet
tcp        0      0 0.0.0.0:9000            0.0.0.0:*               LISTEN      1/dotnet
tcp        0      0 0.0.0.0:9000            0.0.0.0:*               LISTEN      1/dotnet
tcp        0      0 0.0.0.0:9000            0.0.0.0:*               LISTEN      1/dotnet
root@service-67d57dfb6d-wsvvf:/app#

находится ли клиентская служба в том же пространстве имен?

Daniel Farrell 09.08.2018 19:45

@DanFarrell Да, и клиент, и служба находятся в одном пространстве имен.

aditya arun 09.08.2018 20:16

@aditya arun Можете ли вы поделиться журналами из клиентского модуля при попытке подключения службы GRPC?

Nick_Kh 10.08.2018 15:38
Развертывание модели машинного обучения с помощью Flask - Angular в Kubernetes
Развертывание модели машинного обучения с помощью Flask - Angular в Kubernetes
Kubernetes - это портативная, расширяемая платформа с открытым исходным кодом для управления контейнерными рабочими нагрузками и сервисами, которая...
Как создать PHP Image с нуля
Как создать PHP Image с нуля
Сегодня мы создадим PHP Image from Scratch для того, чтобы легко развернуть базовые PHP-приложения. Пожалуйста, имейте в виду, что это разработка для...
0
3
742
2

Ответы 2

Попробуйте изменить targetPort на 9000 в вашем объекте службы kubernetes.

Проблема с сертификатами. Я пытался использовать привязки SSL, в которых использовались символы подстановки. Я изменил его на обслуживание внутреннего локального домена, и он начал работать.

Другие вопросы по теме