【问题标题】:How do I make my admin ui of cockroachdb publicly available via traefik ingress controller on kubernetes?如何通过 kubernetes 上的 traefik 入口控制器公开我的 cockroachdb 管理员用户界面?
【发布时间】:2019-04-30 11:50:02
【问题描述】:

Kubernetes 专用 cockroachdb 节点 - 通过 traefik 入口控制器访问管理 ui 失败 - 页面未正确重定向

我有一个运行 cockroachdb 的专用 kubernetes 节点。豆荚已安排好,一切都已设置好。我想从这样的子域访问管理 UI:cockroachdb.hostname.com。我已经使用 traefik 仪表板和 ceph 仪表板完成了这项工作,所以我知道我的入口设置正在运行。我什至让 cert-manager 运行以启用 https。我从浏览器收到页面未正确重定向的错误。

我必须在特殊的地方指定主机名吗?

我尝试添加这个但没有成功:--http-host cockroachdb.hostname.com

此专用节点有自己的公共 ip,未映射到 hostname.com。我想我需要更改 cockroachdb 中的设置,但我不知道是哪个,因为我是新手。

有谁知道如何通过入口发布管理 UI?

EDIT01:添加入口和服务配置文件

入口:

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: cockroachdb-public
  annotations:
    kubernetes.io/ingress.class: traefik
    traefik.frontend.rule.type: PathPrefixStrip
    certmanager.k8s.io/issuer: "letsencrypt-prod"
    certmanager.k8s.io/acme-challenge-type: http01
    ingress.kubernetes.io/ssl-redirect: "true"
    ingress.kubernetes.io/ssl-temporary-redirect: "true"
    ingress.kubernetes.io/ssl-host: "cockroachdb.hostname.com"
    traefik.frontend.rule: "Host:cockroachdb.hostname.com,www.cockroachdb.hostname.com"
    traefik.frontend.redirect.regex: "^https://www.cockroachdb.hostname.com(.*)"
    traefik.frontend.redirect.replacement: "https://cockroachdb.hostname.com/$1"
spec:
  rules:
  - host: cockroachdb.hostname.com
    http:
      paths:
      - path: /
        backend:
          serviceName: cockroachdb-public
          servicePort: http
  - host: www.cockroachdb.hostname.com
    http:
      paths:
      - path: /
        backend:
          serviceName: cockroachdb-public
          servicePort: http
  tls:
  - hosts:
    - cockroachdb.hostname.com
    - www.cockroachdb.hostname.com
    secretName: cockroachdb-secret

服务:

apiVersion: v1
kind: Service
metadata:
  # This service is meant to be used by clients of the database. It exposes a ClusterIP that will
  # automatically load balance connections to the different database pods.
  name: cockroachdb-public
  labels:
    app: cockroachdb
spec:
  ports:
  # The main port, served by gRPC, serves Postgres-flavor SQL, internode
  # traffic and the cli.
  - port: 26257
    targetPort: 26257
    name: grpc
  # The secondary port serves the UI as well as health and debug endpoints.
  - port: 8080
    targetPort: 8080
    name: http
  selector:
    app: cockroachdb

EDIT02:

我现在可以访问管理 UI 页面,但只能通过端口 8080 访问服务器的外部 IP 地址。我想我需要告诉我的服务器它的 IP 地址映射到正确的子域?

EDIT03:

在两个计划的 traefik-ingress pod 上都会创建以下日志: time="2019-04-29T04:31:42Z" level=error msg="Service not found for default/cockroachdb-public"

【问题讨论】:

  • 请分享您的清单文件,其中包含入口/服务资源定义。我了解,您可以安全地使用 cockroachdb UI,例如kubectl 端口转发
  • @Nepomucen 我添加了资源定义。 cockroachdb 一是从文档中获取的标准。我认为这与端口有关,而且我有一个专用节点,它有自己的外部 IP 地址和不同的主机名。
  • 您遇到的错误是什么?当您获取 Traefik pod 的日志时,您会看到哪些失败的连接尝试?
  • 哦,是的,出了点问题...time="2019-04-29T07:00:35Z" level=error msg="Service not found for default/cockroachdb-public"这是无限循环
  • 你在运行kubectl get svc时看到你的服务了吗?

标签: kubernetes kubernetes-ingress cockroachdb


【解决方案1】:

您的引用在入口端看起来不错。您正在使用相当多的重定向,除非您真的知道每个重定向在完成什么,否则不要使用它们,您可能会陷入无限循环的重定向。

你可以看看下面的日志和方法来调试:

运行kubectl logs <traefik pod>,查看最后一批日志。

运行kubectl get service,据我所知,这可能是您的主要问题。确保您的服务存在于默认命名空间中。

运行kubectl port-forward svc/cockroachdb-public 8080:8080 并尝试通过localhost:8080 连接到它,并查看终端以获取潜在的错误消息。

运行kubectl describe ingress cockroachdb-public 并查看事件,这应该可以为您提供一些工作。

尝试从您正在运行的另一个 pod ping cockroachdb-public.default.svc.cluster.local 访问该服务,并查看它是否解析了 IP 地址。

看看你的 clusterrolebindings 和 serviceaccount,它可能会受到限制并且没有权限在默认命名空间中列出服务:kubectl create clusterrolebinding default-admin --clusterrole cluster-admin --serviceaccount=default:default

【讨论】:

    猜你喜欢
    • 2017-10-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-06
    • 2019-02-11
    • 1970-01-01
    • 1970-01-01
    • 2016-04-04
    相关资源
    最近更新 更多