---
kind: GatewayClass
apiVersion: gateway.networking.k8s.io/v1
metadata:
  name: traefik
spec:
  controllerName: traefik.io/gateway-controller

---
kind: Namespace
apiVersion: v1
metadata:
  name: traefik

---
kind: ServiceAccount
apiVersion: v1
metadata:
  name: traefik
  namespace: traefik

---
kind: Deployment
apiVersion: apps/v1
metadata:
  name: traefik
  namespace: traefik
  labels:
    app: traefik

spec:
  replicas: 1
  selector:
    matchLabels:
      app: traefik
  template:
    metadata:
      labels:
        app: traefik
    spec:
      serviceAccountName: traefik
      containers:
        - name: traefik
          image: traefik/traefik:latest
          imagePullPolicy: Never
          args:
            - --log.level=DEBUG
            - --api.insecure
            - --entrypoints.web.address=:80
            - --entrypoints.websecure.address=:443
            - --experimental.kubernetesgateway
            - --providers.kubernetesgateway.experimentalChannel
            - --providers.kubernetesgateway.statusaddress.service.namespace=traefik
            - --providers.kubernetesgateway.statusaddress.service.name=traefik
          ports:
            - name: web
              containerPort: 80
            - name: admin
              containerPort: 8080
            - name: websecure
              containerPort: 443

---
apiVersion: v1
kind: Service
metadata:
  name: traefik
  namespace: traefik
spec:
  type: LoadBalancer
  selector:
    app: traefik
  ports:
    - port: 80
      name: web
      targetPort: web
    - port: 443
      name: websecure
      targetPort: websecure
    - port: 8080
      name: admin
      targetPort: admin
