当前位置: 首页 > 知识库问答 >
问题:

Kubernetes Nginx Ingres找不到服务endpoint

卫和洽
2023-03-14

让Nginx入口控制器在我的Kubernetes集群中工作时遇到了一些问题。我已经创建了nginx入口部署、服务、角色等,根据https://kubernetes.github.io/ingress-nginx/deploy/

我还部署了一个简单的hello world应用程序,它可以监听端口8080

apiVersion: apps/v1
kind: DaemonSet
metadata:
  name: hello-world
  namespace: default
spec:
  selector:
    matchLabels:
      name: hello-world
  template:
    metadata:
      labels:
        name: hello-world
    spec:
      containers:
      - name: hello-world
        image: myrepo/hello-world
        resources:
          requests:
            memory: 200Mi
            cpu: 150m
          limits:
            cpu: 300m
        ports:
          - name: http
            containerPort: 8080
            protocol: TCP

并为其创建了服务

kind: Service
apiVersion: v1
metadata:
  namespace: default
  name: hello-world
spec:
  selector:
    app: hello-world
  ports:
    - name: server
      port: 8080

最后,我创建了一个TLS机密(my TLS secret),并按照说明部署了nginx入口。例如:

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  annotations:
    kubernetes.io/ingress.class: nginx
  name: hello-world
  namespace: default
spec:
  rules:
    - host: hello-world.mydomain.com
      http:
        paths:
        - path: /
          backend:
            serviceName: hello-world
            servicePort: server
  tls:
      - hosts:
          - hello-world.mydomain.com
        secretName: my-tls-cert

然而,我无法访问我的应用程序,在我看到的日志中

W0103 19:11:15.712062       6 controller.go:826] Service "default/hello-world" does not have any active Endpoint.
I0103 19:11:15.712254       6 controller.go:172] Configuration changes detected, backend reload required.
I0103 19:11:15.864774       6 controller.go:190] Backend successfully reloaded.

我不确定为什么它说服务“默认/hello-world”没有任何活动endpoint。我为traefik入口控制器使用了类似的服务定义,没有任何问题。

我希望我在nginx ingress上遗漏了一些明显的东西。如果您能提供任何帮助,我们将不胜感激!


共有3个答案

邢新
2023-03-14

在我的例子中,我在服务选择器中包含了一个“id”指令,该指令在部署元数据中丢失,这阻止了endpoint控制器找到正确的Pod。我预计相反的情况也会失败:

---
apiVersion: v1
kind: Service
metadata:
  name: some-service
spec:
  ports:
    - name: port-name
      port: 1234
      protocol: TCP
  selector:
    app: some-app
    id: "0"  ## include in both or neither
胡元明
2023-03-14

另一种可能发生的情况是,入口控制器的入口类与用于服务的入口资源清单中的入口类不匹配。

Nginx安装命令,简短示例:

  helm install stable/nginx-ingress \
  --name ${INGRESS_RELEASE_NAME} \
  --namespace ${K8S_NAMESPACE} \
  --set controller.scope.enabled=true \
  --set controller.scope.namespace=${K8S_NAMESPACE} \
  --set controller.ingressClass=${NGINX_INGRESS_CLASS}

ingress资源规范,摘录:

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  labels:
  annotations:
    # folowing line is not valid for K8s or Helm, 
    # but reflects the values must be the same
    kubernetes.io/ingress.class: ${NGINX_INGRESS_CLASS}
颜乐
2023-03-14

我发现我做错了什么。在我的应用程序定义中,我使用名称作为选择器

  selector:
    matchLabels:
      name: hello-world
  template:
    metadata:
      labels:
        name: hello-world

而在我的服务中,我使用的是应用程序

  selector:
    app: hello-world

在将我的服务更新为使用app后,它起到了作用

  selector:
    matchLabels:
      app: hello-world
  template:
    metadata:
      labels:
        app: hello-world
 类似资料:
  • 问题内容: 当我调试该程序时,服务数组为空? 问题答案: 这是因为没有找到与指定的DocFlavor和属性集相对应的PrintService 。除非您的打印机硬件是最新的,否则可能很难找到支持PostScript的打印机。您可以像这样检查所有支持的DocFlavor: 要查找特定的打印服务,您可以执行以下操作:

  • 我有一个独立的Kafka经纪人,我试图配置SASL。配置如下。我试图在经纪人身上设置SASL_PLAIN身份验证。 我的理解是,这与听众有关。名称服务器中的配置。属性,我不需要jaas文件。但我已经尝试过一种方法,看看这是否是一种更好的方法。 我对这些命令中的每一个都进行了实验,但都产生了相同的异常。 显示的异常为: KafkaServer启动期间出现致命错误。准备关机。。。找不到“KafkaSe

  • 这似乎是由导入的“BaseGameUtils”库项目中的“GameHelper.java”文件生成的,该库项目被我的游戏应用程序引用为库。 我已将google-play-sevices_llb导入到我的工作区,并将其作为一个库引用到BaseGameUtils库本身中。在BaseGameUtils的Android私有库中有一个google-play-services.jar。在Android Dep

  • 我有一个带有Spring Boot的简单微服务应用程序,我尝试添加Spring云网关服务,但它不起作用。所有的微服务,包括Eureka服务器,都工作得很好,但当我尝试使用网关路由访问某些微服务时,它找不到微服务。 ApiGateway pom。xml API网关应用程序。yml公司 API网关主 Api网关未找到404错误

  • 我在添加新方法时遗漏了一些东西,但我不知道什么??它正在userDAO中生成“找不到符号”编译错误。countUsers行: 下面是服务界面: 这是实现: 帮助真的非常感谢!