【问题标题】:Nginx ingress controller logs keeps telling me that i have wrong pod informationNginx 入口控制器日志不断告诉我我有错误的 pod 信息
【发布时间】:2020-05-03 13:42:13
【问题描述】:

我在 Kubernetes 集群中运行两个节点。我能够使用 3 个副本及其服务部署我的微服务。现在我正在尝试让 nginx 入口控制器公开我的服务,但我从日志中收到此错误:

获取 pod 信息意外错误:无法获取 POD 信息(缺少 POD_NAME 或 POD_NAMESPACE 环境变量)

我在我的集​​群中设置了一个开发命名空间,这是我的微服务部署的地方,也是 nginx 控制器。我不明白 nginx 如何获取我的 pod 或我如何传递 pod 名称或 pod_namespace。

这是我的 nginx 控制器:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-controller
spec:
  replicas: 1
  selector:
    matchLabels:
      name: nginx-ingress
  template:
    metadata:
      labels:
        name: nginx-ingress
    spec:
      containers:
        - name: nginx-ingress-controller
          image: quay.io/kubernetes-ingress-controller/nginx-ingress-controller:0.27.0
          args:
            - /nginx-ingress-controller
            - --configmap=$(POD_NAMESPACE)/nginx-configuration
          env:
            - name: mycha-deploy
              valueFrom: 
                fieldRef:
                  fieldPath: metadata.name
          ports:
          - name: http
            containerPort: 80
          - name: https
            containerPort: 443

这里是我的部署:

#dDeployment
apiVersion: apps/v1
kind:  Deployment
metadata:
  name: mycha-deploy
  labels:
    app: mycha-app
spec:
  replicas: 3
  selector:
    matchLabels:
      app: mycha-app
  template:
    metadata:
      labels:
        app: mycha-app
    spec:
      containers:
        - name: mycha-container
          image: us.gcr.io/##########/mycha-frontend_kubernetes_rrk8s
          ports:
          - containerPort: 80

谢谢

【问题讨论】:

    标签: docker nginx kubernetes nginx-ingress


    【解决方案1】:

    您的 nginx 入口控制器部署 yaml 看起来不完整,并且在许多其他项目中没有以下内容。

               env:
                - name: POD_NAME
                  valueFrom:
                    fieldRef:
                      fieldPath: metadata.name
                - name: POD_NAMESPACE
                  valueFrom:
                    fieldRef:
                      fieldPath: metadata.namespace
    

    按照docs安装并使用来自here的yamls

    【讨论】:

      【解决方案2】:

      要使用 Nginx Ingress 公开您的服务,您需要先配置它。

      按照installation guide 为您安装 kubernetes。

      您还需要一个service 来“分组”您的应用程序的容器。

      在 Kubernetes 中,Service 是一种抽象,它定义了一组逻辑 Pod 和访问它们的策略(有时这种模式称为微服务)。 Service 所针对的 Pod 集合通常由 selector 确定 ... 例如,考虑一个使用 3 个副本运行的无状态图像处理后端。这些副本是可替代的——前端不关心他们使用哪个后端。虽然组成后端集的实际 Pod 可能会发生变化,但前端客户端不需要意识到这一点,也不需要自己跟踪后端集。 Service 抽象实现了这种解耦。

      如您所见,该服务将根据您的部署中配置的label selector 发现您的容器。

      检查容器的标签选择器:kubectl get pods -owide -l app=mycha-app

      服务 yaml

      应用关注yaml 为您的部署创建服务:

      apiVersion: v1
      kind: Service
      metadata:
        name: mycha-service
      spec:
        selector:
          app: mycha-app <= This is the selector
        ports:
          - protocol: TCP
            port: 8080
            targetPort: 80
      

      检查服务是否使用kubectl get svc 创建。

      在您的桌面上使用端口转发测试应用程序http://localhost:8080

      kubectl port-forward svc/mycha-service 8080:8080

      nginx 入口 yaml

      最后一部分是nginx-ingress。假设你的应用有 url mycha-service.com 并且只有根 '/' 路径:

      apiVersion: networking.k8s.io/v1beta1
      kind: Ingress
      metadata:
        name: ingress-mycha-service
        annotations:
          kubernetes.io/ingress.class: "nginx"
      spec:
        rules:
        - host: mycha-service.com <= app url
          http:
            paths:
            - path: /
              backend:
                serviceName: mycha-service <= Here you define what is the service that your ingress will use to send the requests.
                servicePort: 80
      

      检查入口:kubectl get ingress

      NAME                    HOSTS                           ADDRESS         PORTS     AGE
      ingress-mycha-service   mycha-service.com               XX.X.X.X   80        63s
      

      现在您可以使用上面命令显示的 url mycha-service.com 和 ADDRESS 访问您的应用程序。

      希望对你有帮助=)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-10-29
        • 1970-01-01
        • 2015-11-06
        • 1970-01-01
        • 2014-02-14
        • 2021-09-20
        • 2021-11-09
        • 1970-01-01
        相关资源
        最近更新 更多