microk8s Ingress 无法访问服务(503)

我正在Ubuntu 20.04上使用snap安装的microk8s v1.18.5,并附带了ingressdnsdashboardhelm3storage等插件。

我尝试外部访问运行的grafanadashboard等服务。我根据文档配置了代理服务和Ingress:

kind:Service
apiVersion:v1
metadata:
  name:grafana
  namespace:ingress
spec:
  type:ExternalName
  externalName:monitoring-grafana.kube-system.svc.cluster.local
  ports:
    - port:80
---
kind:Ingress
apiVersion:networking.k8s.io/v1beta1
metadata:
  name:grafana-ingress
  annotations:
    kubernetes.io/ingress.class:“nginx”
    cert-manager.io/cluster-issuer:“letsencrypt-prod”
    kubernetes.io/tls-acme:“true”
spec:
  tls:
    - hosts:
        - “grafana.example.com”
      secretName:grafana-tls
  rules:
    - host:grafana.example.com
      http:
        paths:
          - backend:
              serviceName:grafana
              servicePort:80
            path:/
---

kind:Service
apiVersion:v1
metadata:
  name:dashboard
  namespace:ingress
spec:
  type:ExternalName
  externalName:kubernetes-dashboard.kube-system.svc.cluster.local
  ports:
    - port:443
---
kind:Ingress
apiVersion:networking.k8s.io/v1beta1
metadata:
  name:dashboard-ingress
  annotations:
    kubernetes.io/ingress.class:“nginx”
    cert-manager.io/cluster-issuer:“letsencrypt-prod”
    kubernetes.io/tls-acme:“true”
spec:
  tls:
    - hosts:
        - “dashboard.example.com”
      secretName:dashboard-tls
  rules:
    - host:dashboard.example.com
      http:
        paths:
          - backend:
              serviceName:dashboard
              servicePort:443
            path:/
---

尝试访问dashboard或grafana时,我收到以下消息:

503 Service Temporarily Unavailable
openresty/1.15.8.1

我该怎么做才能找到根本原因?

我还从helm3运行cert-manager和external-dns,它们的配置是否与此问题相关?

点赞
用户12237732
用户12237732

首先,你必须将你的 dashboard 和 grafana 服务类型 更改为 NodePort,以使 ingress 正确工作。

此外,microk8s 的 Kubernetes dashboard 可以通过 <master_node_ip>:8001/api/v1/namespaces/kube-system/services/https:kubernetes-dashboard:/proxy/ 访问,因此您必须在您的 URL 或 ingress 清单中提及它。当你运行 curl dashboard.example.com 时, 它会给出 503 Service Temporarily Unavailable 错误。但是,当你输入完整路径时,它将显示网站:

curl http://dashboard.example.com:8001/api/v1/namespaces/kube-system/services/https:kubernetes-dashboard:/proxy

<!--
Copyright 2017 The Kubernetes Authors.

[...]

这是一个将 /api/v1/namespaces/kube-system/services/https:kubernetes-dashboard:/proxy 重写为 /dashboard/ 的 ingress 示例:

kind: Ingress
apiVersion: networking.k8s.io/v1beta1
metadata:
  name: grafana-ingress
  namespace: kube-system
  annotations:
    kubernetes.io/ingress.class: nginx
    # Add https backend protocol support for ingress-nginx
    nginx.ingress.kubernetes.io/backend-protocol: "HTTPS"
    nginx.ingress.kubernetes.io/configuration-snippet: |
      proxy_set_header Accept-Encoding "";
      sub_filter '<base href="/">' '<base href="/dashboard/">';
      sub_filter_once on;
    nginx.ingress.kubernetes.io/rewrite-target: /$2
spec:
  rules:
    - host: dashboard.example.com
      http:
        paths:
          - path: /dashboard(/|$)(.*)
            backend:
              serviceName: kubernetes-dashboard
              servicePort: 443
2020-07-29 15:04:59