Microservices 在minkube中跨命名空间通信是如何工作的

Microservices 在minkube中跨命名空间通信是如何工作的,microservices,kubernetes-ingress,minikube,nginx-ingress,kubernetes-service,Microservices,Kubernetes Ingress,Minikube,Nginx Ingress,Kubernetes Service,我在Ubuntu18.04上使用minikube中的Kubernetes,并启用了ingress插件。 我希望我的NextJS服务仅通过ingress controller发出请求,从而与通过ingress服务器连接的Express服务通信。因此,当我使用跨名称空间通信时,它不会像本教程所示那样工作。因为minikube中的ingress nginx在kube系统名称空间上运行 $ kubectl get service -n kube-system NAME

我在Ubuntu18.04上使用minikube中的Kubernetes,并启用了ingress插件。 我希望我的NextJS服务仅通过ingress controller发出请求,从而与通过ingress服务器连接的Express服务通信。因此,当我使用跨名称空间通信时,它不会像本教程所示那样工作。因为minikube中的ingress nginx在kube系统名称空间上运行

$ 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
exp-mongo-srv    ClusterIP   10.103.255.125   <none>        27017/TCP   42s
exp-srv          ClusterIP   10.103.118.45    <none>        3000/TCP    42s
next-srv         ClusterIP   10.108.158.184   <none>        3000/TCP    39s

$kubectl获得服务
名称类型CLUSTER-IP外部IP端口年龄
exp mongo srv ClusterIP 10.103.255.125 27017/TCP 42s
exp srv ClusterIP 10.103.118.45 3000/TCP 42s
下一个srv ClusterIP 10.108.158.184 3000/TCP 39s
预期的请求url为:http://ingress-nginx.ingress-nginx.svc.cluster.local(通过nginx进行通信)

但是我必须通过
http://exp-srv:3000
(服务之间的直接通信)

这样做很简单

您添加了错误的命名空间名称

而不是

http://ingress-nginx.ingress-nginx.svc.cluster.local
应该是

http://ingress-nginx.kube-system.svc.cluster.local
如果您想将其用作主机并解决它

如果您正在为位于另一命名空间中的服务使用ambassador to任何其他API网关,则始终建议您使用:

            Use : <service name>
            Use : <service.name>.<namespace name>
            Not : <service.name>.<namespace name>.svc.cluster.local
这里用适当的值替换


在Kubernetes中,名称空间用于创建虚拟环境,但所有名称空间都相互连接。

刚刚偶然发现了这一点。我认为默认情况下,服务
ingres nginx controller acmission
是一个集群,它只有443个HTTPS端口,因此无法解决它。要解决这个问题,您需要公开一个新的clusterIP服务

kubectl暴露部署入口nginx控制器--目标端口=80--类型=ClusterIP-n kube系统


ingress-nginx.kube-system.svc.cluster.local、ingress-nginx.kube-system都给出了找不到的地址。请检查服务和控制器在哪里运行。在kube系统内部或ingress nnginx名称内部,服务和名称空间如所述。有默认和kube系统名称空间,没有入口nginx名称空间。
kind: Service
apiVersion: v1
metadata:
  name: service
spec:
  type: ExternalName
  externalName: <servicename>.<namespace>.svc.cluster.local