跨名称空间通信如何在Minkube中工作

问题描述

我在启用了入口插件的Ubuntu 18.04的minikube中使用Kubernetes。 我希望通过仅通过Ingress控制器发出请求,将NextJS服务与通过Ingress服务器连接的Express Service通信。因此,当我使用跨名称空间通信时,它将无法正常使用,如本教程所示。由于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

预期的请求网址为: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 公开部署 ingress-nginx-controller --target-port=80 --type=ClusterIP -n kube-system

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...