【问题标题】:Kubernetes Ingress returns "Cannot get /"Kubernetes Ingress 返回“无法获取 /”
【发布时间】:2021-10-26 15:17:12
【问题描述】:

我正在尝试在我的集群上部署一个 NodeRED pod,并为它创建了一个服务和入口,以便在我访问同一域下的集群的其余部分时可以访问它。但是,当我尝试通过host-name.com/nodered 访问它时,我收到Cannot GET /nodered

以下是使用的模板并描述了所有涉及的组件。

apiVersion: v1
kind: Service
metadata:
  name: nodered-app-service
  namespace: {{ kubernetes_namespace_name }}
spec:
  ports:
  - port: 1880
    targetPort: 1880
  selector:
    app: nodered-service-pod

我也尝试过使用 port:80 作为服务,但无济于事。

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nodered-service-deployment
  namespace: {{ kubernetes_namespace_name }}
  labels:
    app: nodered-service-deployment
    name: nodered-service-deployment
spec:
  replicas: 1
  selector:
    matchLabels:
      app: nodered-service-pod
  template:
    metadata:
      labels:
        app: nodered-service-pod
        target: gateway
        buildVersion: "{{ kubernetes_build_number }}"
    spec:
      terminationGracePeriodSeconds: 10
      serviceAccountName: nodered-service-account
      automountServiceAccountToken: false
      securityContext:
        runAsUser: 1000
        runAsGroup: 1000
        fsGroup: 1000
      containers:
      - name: nodered-service-statefulset
        image: nodered/node-red:{{ nodered_service_version }}
        imagePullPolicy: {{ kubernetes_image_pull_policy }}
        readinessProbe:
          httpGet:
            path: /
            port: 1880
          initialDelaySeconds: 30
          timeoutSeconds: 1     
          periodSeconds: 10
          failureThreshold: 3
        livenessProbe:
          httpGet:
            path: /
            port: 1880
          initialDelaySeconds: 30
          timeoutSeconds: 1     
          periodSeconds: 10
          failureThreshold: 3  
        securityContext:
          allowPrivilegeEscalation: false
        resources:
          limits:
            memory: "2048M"
            cpu: "1000m"
          requests:
            memory: "500M"
            cpu: "100m"
        ports:
        - containerPort: 1880
          name: port-name
        envFrom:
          - configMapRef:
              name: nodered-service-configmap
        env:
          - name: BUILD_TIME
            value: "{{ kubernetes_build_time }}"

target: gateway 指的是入口控制器

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: nodered-ingress
  namespace: {{ kubernetes_namespace_name }}
  annotations: 
    kubernetes.io/ingress.class: nginx
    nginx.ingress.kubernetes.io/ssl-redirect: "false"
spec:
  rules:
  - host: host-name.com
    http:
      paths:
      - path:  /nodered(/|$)(.*)
        backend:
          serviceName: nodered-app-service
          servicePort: 1880

以下是我的描述显示

Name:              nodered-app-service
Namespace:         nodered
Labels:            <none>
Annotations:       <none>
Selector:          app=nodered-service-pod
Type:              ClusterIP
IP:                55.3.145.249
Port:              <unset>  1880/TCP
TargetPort:        port-name/TCP
Endpoints:         10.7.0.79:1880
Session Affinity:  None
Events:            <none>
Name:         nodered-service-statefulset-6c678b7774-clx48
Namespace:    nodered
Priority:     0
Node:         aks-default-40441371-vmss000007/10.7.0.66
Start Time:   Thu, 26 Aug 2021 14:23:33 +0200
Labels:       app=nodered-service-pod
              buildVersion=latest
              pod-template-hash=6c678b7774
              target=gateway
Annotations:  <none>
Status:       Running
IP:           10.7.0.79
IPs:
  IP:           10.7.0.79
Controlled By:  ReplicaSet/nodered-service-statefulset-6c678b7774
Containers:
  nodered-service-statefulset:
    Container ID:   docker://a6f8c9d010feaee352bf219f85205222fa7070c72440c885b9cd52215c4c1042
    Image:          nodered/node-red:latest-12
    Image ID:       docker-pullable://nodered/node-red@sha256:f02ccb26aaca2b3ee9c8a452d9516c9546509690523627a33909af9cf1e93d1e
    Port:           1880/TCP
    Host Port:      0/TCP
    State:          Running
      Started:      Thu, 26 Aug 2021 14:23:36 +0200
    Ready:          True
    Restart Count:  0
    Limits:
      cpu:     1
      memory:  2048M
    Requests:
      cpu:      100m
      memory:   500M
    Liveness:   http-get http://:1880/ delay=30s timeout=1s period=10s #success=1 #failure=3
    Readiness:  http-get http://:1880/ delay=30s timeout=1s period=10s #success=1 #failure=3
    Environment Variables from:
      nodered-service-configmap  ConfigMap  Optional: false
    Environment:
      BUILD_TIME:  2021-08-26T12:23:06.219818+0000
    Mounts:        <none>
Conditions:
  Type              Status
  Initialized       True
  Ready             True
  ContainersReady   True
  PodScheduled      True
Volumes:            <none>
QoS Class:          Burstable
Node-Selectors:     <none>
Tolerations:        node.kubernetes.io/not-ready:NoExecute op=Exists for 300s
                    node.kubernetes.io/unreachable:NoExecute op=Exists for 300s
Events:             <none>
Name:              nodered-app-service
Namespace:         nodered
Labels:            <none>
Annotations:       <none>
Selector:          app=nodered-service-pod
Type:              ClusterIP
IP:                55.3.145.249
Port:              <unset>  1880/TCP
TargetPort:        port-name/TCP
Endpoints:         10.7.0.79:1880
Session Affinity:  None
Events:            <none>
PS C:\Users\hid5tim> kubectl describe ingress -n nodered
Name:             nodered-ingress
Namespace:        nodered
Address:          10.7.31.254
Default backend:  default-http-backend:80 (<error: endpoints "default-http-backend" not found>)
Rules:
  Host                              Path  Backends
  ----                              ----  --------
  host-name.com
                                    /nodered(/|$)(.*)   nodered-app-service:1880 (10.7.0.79:1880)
Annotations:                        kubernetes.io/ingress.class: nginx
                                    nginx.ingress.kubernetes.io/ssl-redirect: false
Events:                             <none>

入口控制器的日志如下。在过去的 24 小时左右,我一直在处理这个问题,这让我心碎,设置看起来与我拥有的其他功能性部署相同。这可能是节点图像有问题吗?我查过了,它确实暴露了 1880。

194.xx.xxx.x - [194.xx.xxx.x] - - [26/Aug/2021:10:40:12 +0000] "GET /nodered HTTP/1.1" 404 146 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.159 Safari/537.36" 871 0.008 [nodered-nodered-app-service-80] 10.7.0.68:1880 146 0.008 404
74887808fa2eb09fd4ed64061639991e ```

【问题讨论】:

  • 我想指出你在入口定义中的这一行: - path: /nodered(/|$)(.*) 你确定需要使用它吗?看起来像是来自 Rewrite annotation 的一部分,但您尝试请求 host-name.com/nodered
  • @AndrewSkorkin 感谢您指出这一点,是的,原来这就是问题所在。我删除了 (/|$)(.*) 并且它起作用了!

标签: azure kubernetes kubernetes-ingress nginx-ingress kubernetes-service


【解决方案1】:

正如 Andrew 所指出的,我使用了错误的 rewrite 注释,一旦我删除了 (/|$)(.*) 并将路径类型指定为前缀,它就可以工作了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-06-14
    • 1970-01-01
    • 2019-08-08
    • 2021-11-03
    • 2020-11-05
    • 2017-08-15
    • 1970-01-01
    • 2018-09-25
    相关资源
    最近更新 更多