我正在为我们出售的应用程序设置开发环境。
由于我们使用此环境进行积极的开发,因此有必要像在客户给定的环境那样或多或少地构建它。 客户使用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进行访问。 我还没有运行它。请帮助我,我做错什么了吗?
答案 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