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

虽然安装了nginx,但无法连接到我的kubernetes集群

酆乐湛
2023-03-14

我有一个裸机kubernetes集群。我应用了这样的kubernetes nginx部署:kubectl应用-fhttps://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v0.34.1/deploy/static/provider/baremetal/deploy.yaml

并添加了这个入口资源:

apiVersion: v1
kind: Service
metadata:
  name: ingress-nginx
  namespace: ingress-nginx
spec:
  externalTrafficPolicy: Local
  selector:
    app: ingress-nginx
    name: ingress-nginx
  type: NodePort
  ports:
    - name: http
      port: 80
      targetPort: http
    - name: https
      port: 443
      targetPort: https

我的入口资源:

apiVersion: networking.k8s.io/v1beta1 # for versions before 1.14 use extensions/v1beta1
kind: Ingress
metadata:
  name: ingress
spec:
  rules:
    - host: ** master hostname **
      http:
        paths:
          - path: /rest/endpoints/hello
            backend:
              serviceName: microservices-service
              servicePort: 8085
          - path: /rest/endpoints/calculateIterationTotalCapcity
            backend:
              serviceName: microservices-service
              servicePort: 8085

但我仍然无法在80号端口找到我的主人,你能帮忙吗?提前感谢。

共有2个答案

姬博瀚
2023-03-14

由于您使用NodePort类型服务来公开nginx入口控制器,Kuberneretes将在30000-32767之间分配一个端口,您需要使用该端口进行访问。

但是如果你想在主节点上使用端口80访问它,那么你需要通过主机网络部署nginx入口控制器

这可以通过在nginx入口控制器pods的规范中启用host Network选项来实现,方法是编辑nginx入口控制器的现有部署或更改yaml并应用它。

template:
  spec:
    hostNetwork: true

完成此操作后,您应该使用curl访问微服务

南门志
2023-03-14

从所附信息中,我们可以看出,您的服务定义不正确,原因如下:

selector:
    app: ingress-nginx

正如您在使用NodePort的裸机安装的原始服务定义中所看到的,它应该如下所示:

spec:
  type: NodePort
  ports:
    - name: http
      port: 80
      protocol: TCP
      targetPort: http
    - name: https
      port: 443
      protocol: TCP
      targetPort: https
  selector:
    app.kubernetes.io/name: ingress-nginx
    app.kubernetes.io/instance: ingress-nginx
    app.kubernetes.io/component: controller

注:

服务资源——在Kubernetes中,服务是一种抽象,它定义了一组逻辑单元和访问它们的策略(有时这种模式被称为微服务)。服务所针对的pod集通常由选择器决定

在这种情况下,您的服务可能没有合适的endpoint,所以我的建议是根据官方文档重新部署您的nginx-ingress控制器。

根据您的需要,您可以将控制器暴露在以下位置:

  • 节点端口服务
  • 通过Arghya Sadhu所述的主机网络

注:

启用此选项会将每个系统守护进程暴露给任何网络接口上的NGINX入口控制器,包括主机的回环。请仔细评估这对您系统安全性的影响。

    < li >使用MetalLB作为负载平衡器服务公开-“裸机Kubernetes集群的负载平衡器实施”

一旦您的入口控制器正常工作,您就可以执行以下操作:

    < li >基本用法-基于主机的路由 < li >入口 < li >入口类

注:

警告: 如果将多个 IngressClass 标记为群集的默认对象,则准入控制器会阻止创建未指定 IngressClassName 的新 Ingress 对象。您可以通过确保在集群中最多将 1 个入口类标记为默认值来解决此问题

 类似资料:
  • 随着库伯内特斯集群的启动和运行,并且能够通过ssh键访问master并在那里运行kubectl命令;我想在我的本地机器上运行kubectl命令。所以我尝试按照kubectl配置设置配置: 激活上下文: 当我运行kubectl命令时: 它返回: 与服务器localhost:8080的连接被拒绝-是否指定了正确的主机或端口?

  • null NewJenkins.Values具有以下特性。 报告的错误是。 我在谷歌上搜索了一段时间,很多网站都提到了服务帐户设置,但没有任何工作。 还有别的步骤吗?

  • 当我试图运行dataloader时。py我得到了以下导入错误。我逐行尝试代码,发现在将tensorlayer导入为t1时出现了此错误。 ModuleNotFoundError:没有名为'numpy.core._multiarray_umath'的模块重要错误:numpy.core.multiarray导入失败 上述异常是以下异常的直接原因: Traceback(最近的调用最后):文件”

  • 我试图在我本地minikube集群上的一个简单示例中使用fabric8io/kubernetes-client,在这里我获得了一个pod的IP 是完成执行的pod的名称,如果执行则可见。 是一个kubernetes API主机,我从中获得该主机。 MiniKube只有1个节点。 Fabric8IO/Kubernetes-客户端版本为4.9.1 Java 11 我将此代码作为作业部署在的同一集群上。

  • 我为数据类创建了一个var扩展属性,如下所示: 但是,当我尝试将“Val”重新分配给此行中的新值时,编译器会抱怨“Val无法重新分配”: 我真的不明白为什么会这样??我有一个“var”位图属性而不是“val”,那么问题是什么?更重要的是,什么是解决方案或替代方案?

  • 我将JAVA\u HOME变量设置为follow path:/usr/lib/jvm/jdk11,当我放置以下命令:JAVA-version时,它显示当前版本,echo$JAVA\u HOME指示上述路径。当我启动tomcat时,会出现以下错误消息:既没有定义JAVA\u HOME,也没有定义JRE\u HOME变量。 我把一切都设置好了,但是公猫找不到它。