2

尝试连接到使用 Kong 作为入口控制器的云托管 Kubernetes 服务上运行的 Jupyter Lab 容器(最终也包括其他应用程序)。接收"no Route matched with those values"到对 Kong 的公共 IP 的 http 响应和入口控制器日志表明:

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 AddressYAML 中正确填充。在将它们合并到 Kong 的默认命名空间之前,我尝试了不同的命名空间,并且除了容器目标端口之外,还尝试将服务端口设置为 8888。

感谢您在调试时提供的任何帮助。

4

1 回答 1

2

rjup2 Service没有有效的选择器。请注意,Pods您尝试公开的标签标有run: rjup2label 和您Serviceapp: rjup2选择器。

顺便提一句。您会收到非常清晰的错误消息,指出问题可能出在哪里:

service kong/rjup2 does not have any active endpoints

如果命名空间中的rjup2服务kong没有任何活动端点,则意味着它没有Pods正确公开您的服务,这可能表明您的配置可能不匹配。

您可以通过运行来检查它:

kubectl get ep -n kong

通常您应该看到匹配的Endpoints对象。在您的情况下,您不会看到它,因为在Service它有一个有效的选择器之前您不能公开任何 pod。

如果你修正你的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
于 2020-08-06T11:14:37.140 回答