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



我在Ubuntu 18.04上的minikube中使用Kubernetes,并启用了ingress插件。我希望我的NextJS服务通过ingress控制器发出请求,与通过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

所需的请求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

如果你想用它作为主机并想解决它

如果您使用大使到任何其他API网关的服务位于另一个名称空间,它总是建议使用:

Use : <service name>
Use : <service.name>.<namespace name>
Not : <service.name>.<namespace name>.svc.cluster.local

它将类似于:servicename.namespacename.svc.cluster.local

这将向您提到的名称空间内的特定服务发送请求。

示例:

kind: Service
apiVersion: v1
metadata:
name: service
spec:
type: ExternalName
externalName: <servicename>.<namespace>.svc.cluster.local

这里用适当的值替换<servicename><namespace>

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

刚刚偶然发现了这个。我认为默认情况下,作为ClusterIP的服务ingress-nginx-controller-admission只有443,它是HTTPS端口公开的,因此它无法解决它。要解决这个问题,你需要做的是公开一个新的ClusterIP服务。

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

相关内容

  • 没有找到相关文章

最新更新