我可以使用入口从 k8s 集群外部访问 Pod,但无法从集群内部访问,并且出现“连接被拒绝”错误。我试图进入拒绝连接的 pod 并运行以下 curls,这些 curls 在我的本地/主机环境中运行时效果很好:
无济于事。集群 ip 是 10.99.224.173 但超时了,我不想绕过 dns,因为这是由 k8s 动态分配的。无论如何它都不起作用。该服务是一个基于 nodejs 的服务。我可以添加更多信息,但我想我会尝试在信息太少而不是太多方面犯错。为了将该问题隔离为 k8s 问题,我在 k8s 之外本地运行了这两个服务,没有出现任何问题。我认为一个好的起点是确定为什么我不能从同一个 pod 内卷曲到服务器。谢谢!
编辑 2:从 skaffold 关闭集群并重新运行 skaffold dev
解决了这个问题,我现在可以很好地运行以下命令:
我发现 tchannel-node library 不接受 0.0.0.0
作为有效的 ip 地址来侦听,我可以通过的最接近的是 127.0.0.1
。不幸的是,这意味着对集群 ip 10.99.224.173:9090
的调用永远不会像 127.0.0.1:9090
那样被服务器注册为 0.0.0.0:9090
。我想知道如何修正我的理解以传递正确的 IP 地址。
编辑(请求的 yaml 文件):
apiVersion: apps/v1
kind: Deployment
metadata:
name: tickets-depl
spec:
replicas: 1
selector:
matchLabels:
app: tickets
template:
metadata:
labels:
app: tickets
spec:
containers:
- name: tickets
image: mine/tickets-go
---
apiVersion: v1
kind: Service
metadata:
name: tickets-svc
spec:
selector:
app: tickets
ports:
- name: tickets
protocol: TCP
port: 4004
targetPort: 4004
apiVersion: apps/v1
kind: Deployment
metadata:
name: auth-depl
spec:
replicas: 1
selector:
matchLabels:
app: auth
template:
metadata:
labels:
app: auth
spec:
containers:
- name: auth
image: mine/auth
env:
- name: PORT
value: "4000"
- name: TCHANNEL_PORT
value: "9090"
---
apiVersion: v1
kind: Service
metadata:
name: auth-svc
spec:
selector:
app: auth
ports:
- name: auth
protocol: TCP
port: 4000
targetPort: 4000
- name: auth-thrift
protocol: TCP
port: 9090
targetPort: 9090
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: ingress-svc
annotations:
kubernetes.io/ingress.class: "nginx"
nginx.ingress.kubernetes.io/use-regex: "true"
spec:
rules:
- host: foo.com
http:
paths:
- path: /api/v1/users/?(.*)
backend:
service:
name: auth-svc
port:
number: 4000
pathType: Prefix
- path: /api/v1/tickets/?(.*)
backend:
service:
name: tickets-svc
port:
number: 4004
pathType: Prefix