【问题标题】:C# GRPC service on KubernetesKubernetes 上的 C# GRPC 服务
【发布时间】:2018-08-09 17:43:02
【问题描述】:

我有一个用 C# 编写的 GRPC 服务,它使用部署在 Kubernetes 中的 .net 核心,使用 flannel 作为 CNI。当我尝试使用 service:9000 从部署在同一集群上的另一个容器连接到此 GRPC 服务时,我得到了 Status(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

请帮忙。

=======

观察:当我在容器 shell 上运行 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#

【问题讨论】:

  • 客户端服务是否在同一个命名空间中?
  • @DanFarrell 是的,客户端和服务都在同一个命名空间中。
  • @aditya arun 当你尝试连接 GRPC 服务时,你能分享来自客户端 Pod 的日志吗?

标签: docker kubernetes .net-core grpc flannel


【解决方案1】:

尝试在您的 kubernetes 服务对象中将 targetPort 更改为 9000。

【讨论】:

    【解决方案2】:

    证书有问题。我试图使用使用通配符的 SSL 绑定。我将其更改为服务内部本地域,它开始工作了。

    【讨论】:

      猜你喜欢
      • 2017-09-09
      • 2022-07-14
      • 1970-01-01
      • 1970-01-01
      • 2017-01-08
      • 1970-01-01
      • 1970-01-01
      • 2021-01-03
      • 1970-01-01
      相关资源
      最近更新 更多