我有一个grpc服务,这里是yaml:
apiVersion: apps/v1
kind: Deployment
metadata:
name: staging
labels:
app: staging
spec:
replicas: 4
selector:
matchLabels:
app: staging
template:
metadata:
labels:
app: staging
spec:
containers:
- name: staging
image: ...
imagePullPolicy: Always
ports:
- containerPort: 5274
- containerPort: 5900
---
apiVersion: v1
kind: Service
metadata:
name: staging-service
spec:
type: NodePort
selector:
app: staging
ports:
- name: staging
protocol: TCP
port: 5274
targetPort: 5274
nodePort: 30277
- name : staging
protocol: TCP
port: 5900
targetPort: 5900
nodePort: 30278
正如你所看到的,grpc在5900端口上,现在我有一个ingres yaml:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: k8s-rpc-ingress
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /$2
nginx.ingress.kubernetes.io/backend-protocol: "GRPC"
spec:
ingressClassName: nginx
rules:
-http:
paths:
- path: /st(/|$)(.*)
pathType: Prefix
backend:
service:
name: staging-service
port:
number: 5900
现在,k8s主程序是 www.example.com ,所以如果我访问 www.example.com 在我的nestjs项目像:
url: ‘192.168.70.1/st’,
package: ‘test’,
我会得到错误:
details: ‘Name resolution failed for target dns:192.168.70.1/st’,
如果我通过192访问GRPC服务。168.70.1:30378一切都很好
我是不是漏掉了什么?
谢谢你
1条答案
按热度按时间rdlzhqv91#
gRPC支持DNS作为默认名称系统。支持以下与IPV4地址相关的格式。
ipv4:address[:port][,address[:port],...] -- IPv4地址
在这里,您可以指定多个逗号分隔的地址,格式为address[:port]:
address是要使用的IPv4地址。
port是要使用的端口。如果未指定,则使用443。
这就是为什么您可以通过www. example访问grpc服务的原因 www.example.com
您可以参考link以获取更多有用信息。