0

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

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

幸运的是,我们获得了用于客户环境的原始 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 本地卷曲网站)。

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

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

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

4

1 回答 1

1

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

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

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

      name: ingress-nginx-controller
      ports:
      - containerPort: 80
        hostPort: 80
        name: http
        protocol: TCP
      - containerPort: 443
        hostPort: 443
        name: https
        protocol: TCP
于 2019-05-16T10:21:26.587 回答