【发布时间】:2021-02-02 15:57:39
【问题描述】:
大家好,我需要一些帮助;我在 Ubuntu 20.04 上的 minikube 中使用 Kubernetes,并启用了入口插件。我希望我的 NextJS 服务通过仅通过入口控制器发出请求来与通过入口服务器连接的 Express 服务进行通信。因此,当我使用跨命名空间通信时,它不会像本教程中所示的那样工作。由于 minikube 中的 ingress-nginx 在 kube-system 命名空间上运行。
$ kubectl get service -n kube-system
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
ingress-nginx-controller-admission ClusterIP 10.103.20.47 none 443/TCP 15d
kube-dns ClusterIP 10.96.0.10 none 53/UDP,53/TCP,9153/TCP 36d
我正在运行的服务
$ kubectl get services
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
auth-mongo-srv ClusterIP 10.96.2.86 <none> 27017/TCP 20m
auth-srv ClusterIP 10.106.150.115 <none> 3000/TCP 20m
client-srv ClusterIP 10.106.45.17 <none> 3000/TCP 20m
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 26h
预期的请求 url 是:http://ingress-nginx.ingress-nginx.svc.cluster.local(通过 nginx 通信) 但是我必须通过 http://auth-srv:3000 (这是服务之间的直接通信)
我的入口配置文件
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: ingress-service
annotations:
kubernetes.io/ingress.class: nginx
nginx.ingress.kubernetes.io/use-regex: 'true'
spec:
rules:
- host: ticketing.dev
http:
paths:
- path: /api/users/?(.*)
pathType: Prefix
backend:
service:
name: auth-srv
port:
number: 3000
- path: /?(.*)
pathType: Prefix
backend:
service:
name: client-srv
port:
number: 3000
【问题讨论】:
-
列出的所有服务都使用集群 IP 服务类型。我建议查看以下帖子,以比较可用的 K8s 服务类型以及每种服务类型可用的 DNS 名称:stackoverflow.com/questions/41509439/…
-
你能用你的入口定义更新你的问题吗?
-
@thomas,我已经用 Ingress 配置文件更新了它。谢谢。
-
我仍然不清楚 NextJs 服务的位置。它是在集群内部还是在主机中运行?你能提供命令
kubectl get pods,svc --all-namespaces --show-labels的输出吗?你提到了一些你正在使用的教程?你也可以提供一些参考吗?
标签: nginx kubernetes kubectl minikube