docker - Kubernetes 上的 C# GRPC 服务
问题描述
我有一个用 C# 编写的 GRPC 服务,使用 .net 核心部署在 Kubernetes 中,法兰绒作为 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
请帮忙。
=======
一个观察:当我在容器外壳上运行 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#
解决方案
尝试在您的 kubernetes 服务对象中将 targetPort 更改为 9000。
推荐阅读
- python - 带有递归 XInclude 语句的 XML
- spring-integration - 使用 Spring Integration 读取文件并希望使用过滤器进行排序和文件提取
- mysql - MySQL在选择时只得到一行重复的结果
- python - 创建空间相关噪声的更快方法?
- android - 如何在 Flutter 应用中正确设置 redirect_uri?
- ios - 如果 Chromecast 是内置电视,则无法检测到它
- python - django - 休息框架响应内容协商没有发生
- dataframe - 在R中,当x和y重复时,我想提取z的最小值
- google-apps-script - 进程运行时在 Google 表格桌面和移动应用中添加警告或信息消息的问题
- android - 键盘出现时如何阻止EditText向上移动