Балансировщик нагрузки не создан и статический ip назначен для входа в traefik на GKE

Когда я настроил входной контроллер для указания на службу traefik, я ожидал, что для этого входного контроллера на GKE будут созданы балансировщики нагрузки таким же образом, LoadBalancer Служба будет. Затем я могу указать на созданный статический 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 ответ

Решение

Вы создаете Service объект для развертывания traefik, но вы использовали NodePort тип, который доступен только внутри кластера. Если вы хотите, чтобы Kubernetes создал LoadBalancer для Serviceнужно указать тип 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 и создаст для вас LoadBalancer с IP.

Другие вопросы по тегам