未创建负载均衡器,并且在GKE上为traefik入口分配了静态IP

时间:2019-02-19 09:38:27

标签: kubernetes google-cloud-platform traefik google-kubernetes-engine

当我设置一个指向traefik服务的入口控制器时,我期望将以一种LoadBalancer服务的方式为GKE上的入口控制器创建负载均衡器。然后,我可以指向创建的静态IP。

但是,当我获得入口时,没有分配静态IP。

$ kubectl get ingresses -n kube-system
NAME              HOSTS                 ADDRESS   PORTS     AGE
traefik-ingress   traefik-ui.minikube             80        4m

traefik-ingress.yml

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: traefik-ingress
  namespace: kube-system
  annotations:
    kubernetes.io/ingress.class: traefik
spec:
  rules:
    - host: traefik-ui.minikube
      http:
        paths:
          - path: "/"
            backend:
              serviceName: traefik-ingress-service
              servicePort: 80

traefik-deployment.yml

---
apiVersion: v1
kind: ServiceAccount
metadata:
  name: traefik-ingress-controller
  namespace: kube-system
---
kind: Deployment
apiVersion: apps/v1
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
---
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 :(得分:3)

您正在为traefik部署创建一个Service对象,但是您已经使用了NodePort类型,该类型只能在集群内部使用。如果您想让Kubernetes为Service创建一个LoadBalancer,则需要在服务中指定类型LoadBalancer,这样您的交易Service就会像

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: LoadBalancer

这将与GKE API对话并为您创建一个具有IP的LoadBalancer。