Kong 入口控制器错误 "no Route matched with those values"
Error "no Route matched with those values" with the Kong ingress controller
尝试连接到使用 Kong 作为入口控制器的云托管 Kubernetes 服务上的 Jupyter Lab 容器(最终还有其他应用程序)运行。在对 Kong 的 public IP 的 http 响应上收到 "no Route matched with those values"
并且入口控制器日志表明:
service kong/rjup2 does not have any active endpoints
no configuration change, skipping sync to Kong
部署配置:
apiVersion: apps/v1
kind: Deployment
metadata:
name: rjup2
namespace: kong
spec:
selector:
matchLabels:
run: rjup2
replicas: 1
template:
metadata:
labels:
run: rjup2
spec:
restartPolicy: Always
containers:
- name: rjup2
image: jupyter/minimal-notebook
imagePullPolicy: Always
ports:
- containerPort: 8888
protocol: TCP
服务配置:
apiVersion: v1
kind: Service
metadata:
name: rjup2
namespace: kong
spec:
selector:
app: rjup2
type: ClusterIP
ports:
- name: http
port: 80
targetPort: 8888
protocol: TCP
入口资源配置:
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: rjup2
namespace: kong
spec:
tls:
- hosts:
- <AKS API server address>
rules:
- host: <AKS API server address>
http:
paths:
- path: /
backend:
serviceName: rjup2
servicePort: 80
API Server Address
已正确填充到已部署的 YAML 中。在将它们整合到 Kong 的默认命名空间下之前,我尝试了不同的命名空间,并且除了容器目标端口之外,还尝试将服务端口设置为 8888。
感谢您在调试过程中提供的任何帮助。
您的 rjup2
Service
没有有效的选择器。请注意,您尝试公开的 Pods
标有 run: rjup2
标签,并且您的 Service
具有 app: rjup2
选择器。
顺便说一句。您会收到非常清楚的错误消息,指出问题可能出在哪里:
service kong/rjup2 does not have any active endpoints
如果您在 kong
命名空间中的 rjup2
服务没有任何活动端点,这意味着它没有正确公开您的 Pods
,这可能表明您的配置。
可以通过运行查看:
kubectl get ep -n kong
通常您应该看到匹配的 Endpoints
对象。在你的情况下,你不会看到它,因为你的 Service
不能公开任何 pods 直到它有一个有效的选择器。
如果您修复 Service
定义,一切都应该正常工作:
apiVersion: v1
kind: Service
metadata:
name: rjup2
namespace: kong
spec:
selector:
run: rjup2
type: ClusterIP
ports:
- name: http
port: 80
targetPort: 8888
protocol: TCP
尝试连接到使用 Kong 作为入口控制器的云托管 Kubernetes 服务上的 Jupyter Lab 容器(最终还有其他应用程序)运行。在对 Kong 的 public IP 的 http 响应上收到 "no Route matched with those values"
并且入口控制器日志表明:
service kong/rjup2 does not have any active endpoints
no configuration change, skipping sync to Kong
部署配置:
apiVersion: apps/v1
kind: Deployment
metadata:
name: rjup2
namespace: kong
spec:
selector:
matchLabels:
run: rjup2
replicas: 1
template:
metadata:
labels:
run: rjup2
spec:
restartPolicy: Always
containers:
- name: rjup2
image: jupyter/minimal-notebook
imagePullPolicy: Always
ports:
- containerPort: 8888
protocol: TCP
服务配置:
apiVersion: v1
kind: Service
metadata:
name: rjup2
namespace: kong
spec:
selector:
app: rjup2
type: ClusterIP
ports:
- name: http
port: 80
targetPort: 8888
protocol: TCP
入口资源配置:
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: rjup2
namespace: kong
spec:
tls:
- hosts:
- <AKS API server address>
rules:
- host: <AKS API server address>
http:
paths:
- path: /
backend:
serviceName: rjup2
servicePort: 80
API Server Address
已正确填充到已部署的 YAML 中。在将它们整合到 Kong 的默认命名空间下之前,我尝试了不同的命名空间,并且除了容器目标端口之外,还尝试将服务端口设置为 8888。
感谢您在调试过程中提供的任何帮助。
您的 rjup2
Service
没有有效的选择器。请注意,您尝试公开的 Pods
标有 run: rjup2
标签,并且您的 Service
具有 app: rjup2
选择器。
顺便说一句。您会收到非常清楚的错误消息,指出问题可能出在哪里:
service kong/rjup2 does not have any active endpoints
如果您在 kong
命名空间中的 rjup2
服务没有任何活动端点,这意味着它没有正确公开您的 Pods
,这可能表明您的配置。
可以通过运行查看:
kubectl get ep -n kong
通常您应该看到匹配的 Endpoints
对象。在你的情况下,你不会看到它,因为你的 Service
不能公开任何 pods 直到它有一个有效的选择器。
如果您修复 Service
定义,一切都应该正常工作:
apiVersion: v1
kind: Service
metadata:
name: rjup2
namespace: kong
spec:
selector:
run: rjup2
type: ClusterIP
ports:
- name: http
port: 80
targetPort: 8888
protocol: TCP