暴露在内部Kubernetes集群中运行的traefik的正确方法?

时间:2018-10-17 05:51:24

标签: traefik traefik-ingress

我有一个本地Kubernetes集群。按照traefik给出的示例,我在集群中运行了traefik。它绑定到一个节点,这将是我的负载均衡器。我可以通过用路由命中节点端口来访问正在运行的服务(带有入口)。例如http://build.mydomain.com:NODEPORT会将我路由到我的詹金斯。

但是我希望能够通过输入http://build.mydomain.com

来击中我的詹金斯

这是否可行,还是必须在集群的外部外部运行traefik?

基本上,我只希望负载平衡器上达到80的所有内容都达到traefik入口控制器,该控制器应根据入口路由请求。

---
apiVersion: v1
kind: ServiceAccount
metadata:
  name: traefik-ingress-controller
  namespace: kube-system
---
kind: Deployment
apiVersion: extensions/v1beta1
metadata:
  name: traefik-ingress-controller
  namespace: kube-system
  labels:
    k8s-app: traefik-ingress-lb
spec:
  replicas: 1
  selector:
    matchLabels:
      k8s-app: traefik-ingress-lb
  template:
    metadata:
      labels:
        k8s-app: traefik-ingress-lb
        name: traefik-ingress-lb
    spec:
      serviceAccountName: traefik-ingress-controller
      terminationGracePeriodSeconds: 60
      containers:
      - image: traefik
        name: traefik-ingress-lb
        ports:
        - name: http
          containerPort: 80
        - name: admin
          containerPort: 8080
        args:
        - --api
        - --kubernetes
        - --logLevel=INFO
      nodeSelector:
        node-role.kubernetes.io/worker: loadbalancer
---
kind: Service
apiVersion: v1
metadata:
  name: traefik-ingress-service
  namespace: kube-system
spec:
  selector:
    k8s-app: traefik-ingress-lb
  ports:
    - protocol: TCP
      port: 80
      name: web
    - protocol: TCP
      port: 8080
      name: admin
  type: NodePort

1 个答案:

答案 0 :(得分:0)

如果在集群内部部署traefik,则只能将其作为NodePort / LoadBalancer或Ingress的服务公开。如果它是一个Ingress,请猜测您在集群外部需要一个负载均衡器。

我只是想要一个简单的反向代理来发现流量并将其路由到新服务。通过在集群外部运行traefik并使其在主节点上指向kubernetes api-server ,可以很好地实现此目的。这是在Traefik配置文件中完成的。像这样:

[kubernetes]
endpoint = "https://my-master-node:6443"
token="" <-- GET THIS FROM YOUR KUBERNETES MASTER NODE
certAuthFilePath = "/root/ssl/ca.crt" <-- GET THIS FROM YOUR KUBERNETES MASTER NODE

然后,它拾取了入口,并将路由到适当的服务。

Jenkins是我在集群中配置的服务之一。 Jenkins期望默认情况下,它的代理在端口50000上进行连接。我花了一些时间试图弄清楚如何根据同一台主机击溃集群中的另一个端口。真的无法正常工作。

然后我发现trafik不支持TCP。 Jenkins代理通过http与主服务器联系打个招呼,然后然后将代理设置为通过 TCP 从服务器连接。

所以最终浪费了精力:-(