【问题标题】:Traefik Ingress not opening portTraefik Ingress 未打开端口
【发布时间】:2019-05-16 08:40:37
【问题描述】:

我正在为我们销售的应用程序设置开发环境。

由于我们使用此环境进行主动开发,因此有必要或多或少地像客户给定的环境一样构建它。 客户使用 Kubernetes 和 traefik。所以我们在 Dev 也是这样做的。

幸运的是,我们获得了用于客户环境的原始 YAML 文件,因此我们只需稍作修改即可使用它们。

在我们设置好 Ingress 和 Traefik Ingress Controller 之后,我假设 kubernetes 将打开系统上的给定端口,因此可以从外部访问应用程序。但它没有,443 和 80 端口没有监听。

我仔细检查了配置(因为我们可以访问客户集群,所以我可以比较他们的环境和我们的环境) - 但一切看起来都完全一样,尽管有 IP 地址和命名空间的名称。

在 traefik 控制器 pod 的日志中,我在这里看不到任何问题。只有我看到一些 TLS 证书错误。 有时在我的测试中,我在打开端口 80 时看到“绑定”权限被拒绝,但目前没有。

我(和客户)将 traefik toml 文件定义为配置映射,并将其作为卷添加到 /opt/conf/traefik.toml 到 pod。该路径作为参数提供给 pod,根据日志,它使用文件。

运行 kubernetes 的服务器是 Windows Server 2016 主机上的 Ubuntu Server 18.04 Hyper-V 机器。 Kubernetes 是使用 apt-get(不是 snap)部署的,集群是使用 kubeadm 设置的。

这是集群配置:

root@srv-app-003:~# kubeadm config view
apiServer:
  extraArgs:
    authorization-mode: Node,RBAC
  timeoutForControlPlane: 4m0s
apiVersion: kubeadm.k8s.io/v1beta1
certificatesDir: /etc/kubernetes/pki
clusterName: kubernetes
controlPlaneEndpoint: ""
controllerManager: {}
dns:
  type: CoreDNS
etcd:
  local:
    dataDir: /var/lib/etcd
imageRepository: k8s.gcr.io
kind: ClusterConfiguration
kubernetesVersion: v1.14.1
networking:
  dnsDomain: cluster.local
  podSubnet: 192.168.0.0/16
  serviceSubnet: 10.96.0.0/12
scheduler: {}

这里是节点配置:

root@srv-app-003:~# kubectl get nodes -o wide
NAME          STATUS   ROLES    AGE   VERSION   INTERNAL-IP     EXTERNAL-IP   OS-IMAGE             KERNEL-VERSION      CONTAINER-RUNTIME
srv-app-003   Ready    master   12d   v1.14.1   192.168.6.203   <none>        Ubuntu 18.04.2 LTS   4.15.0-48-generic   docker://18.9.2

部署有 4 个 Pod,它们都在正常运行(另外,我可以直接从 Pod 本地 curl 网站)。

我把一些重要的yaml文件放在这里:https://gitlab.com/group15/my-awesome-project

如果您需要更多信息(服务帐户、角色(绑定)等...),请告诉我

主要目标是一个正在运行的开发环境,它可以通过 192.168.6.0 网络中的 HTTP(s) 访问。 我还没有让它运行。请帮帮我,我是不是做错了什么?

【问题讨论】:

  • 因此,您并不是说您创建的部署实际上是否有正在运行的 pod。或者他们正在等待。只有一个节点,您可能有一个 taint 会阻止 pod 在主节点上运行。
  • 哦,对不起,你是对的。我将编辑帖子并添加它。这些部署有 4 个 Pod,它们都在正常运行(另外,我可以直接从 Pod 本地卷曲网站)。我的设置只有一台机器结合了主节点和节点(是的,我必须为此调整污点)。

标签: kubernetes yaml kubectl traefik traefik-ingress


【解决方案1】:

在我看来,问题来自您的端口定义。在您提供的部署中,仅定义了 8080 和 9443。另外,它们没有映射到主机端口。

我建议您通过其helm chart 部署 Traefik。这是确保复杂 kubernetes 应用程序的健壮和轻松部署的好方法。

如果您查看此图表,您会see here 端口被定义为“端口”和“主机端口”。这里举个例子,helm 为 nginx 控制器生成了什么(它非常接近 traefik 的需要):

      name: ingress-nginx-controller
      ports:
      - containerPort: 80
        hostPort: 80
        name: http
        protocol: TCP
      - containerPort: 443
        hostPort: 443
        name: https
        protocol: TCP

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-08-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-10-15
    • 1970-01-01
    • 2013-03-29
    相关资源
    最近更新 更多