Traefik入口未打开端口

时间:2019-05-16 08:40:38

标签: kubernetes yaml kubectl traefik traefik-ingress

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

由于我们使用此环境进行积极的开发,因此有必要像在客户给定的环境那样或多或少地构建它。 客户使用Kubernetes和traefik。因此,我们在开发人员中也是如此。

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

设置入口和Traefik入口控制器后,我假设kubernetes将打开系统上的给定端口,因此可以从外部访问应用程序。但事实并非如此,端口443和80上没有监听。

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

在traefik控制器窗格的日志中,我看不到任何错误。只有我看到一些TLS证书错误。 有时,通过测试,我看到打开端口80时拒绝了“绑定”权限,但当前没有。

我(和客户)将traefik toml文件定义为Configuration Map,并将其作为卷添加到/opt/conf/traefik.toml上。该路径作为Pod的参数给出,并根据日志使用文件。

运行kubernetes的服务器是Windows Server 2016主机上的Ubuntu Server 18.04 Hyper-V计算机。 使用apt-get(而非快照)部署Kubernetes,并使用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本地卷曲网站)。

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

告诉我是否需要更多信息(服务帐户,角色(绑定)等...)

主要目标是一个运行中的开发环境,并且可以通过192.168.6.0网络内的HTTP进行访问。 我还没有运行它。请帮助我,我做错什么了吗?

1 个答案:

答案 0 :(得分:0)

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

我建议您通过其helm chart部署Traefik。这是确保复杂的kubernetes应用程序可靠且轻松部署的理想方法。

如果您在此图表中查看,将会see here将端口定义为“端口”和“主机端口”。在下面的示例中,头盔为nginx控制器生成的内容(它确实接近traefik的需求):

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