Search code examples
dockerkubernetesproxytraefik

issues setting up traefik with kubernetes using a simple container


Not sure what I am missing, trying to set up a simple traefik environment with kubernetes proxying the errm/cheese:cheddar docker container to cheddar.minikube

Prerequisite:

  • have minikube setup
git clone # personal repo that is now deleted. see solution below

# setup.sh will delete current minikube environment then recreate it
./setup.sh

# add IP to minikube
echo `minikube ip` cheddar.minikube | sudo tee -a /etc/hosts

Solution

  • after running

    minikube delete
    minikube start
    
    kubectl apply -f https://raw.githubusercontent.com/traefik/traefik/v2.9/docs/content/reference/dynamic-configuration/kubernetes-crd-definition-v1.yml
    kubectl apply -f https://raw.githubusercontent.com/traefik/traefik/v2.9/docs/content/reference/dynamic-configuration/kubernetes-crd-rbac.yml
    
    kubectl apply -f traefik-deployment.yaml -f traefik-whoami.yaml 
    

    with...

    traefik-deployment.yaml:

    apiVersion: v1
    kind: ServiceAccount
    metadata:
      namespace: default
      name: traefik-ingress-controller
    ---
    kind: Deployment
    apiVersion: apps/v1
    metadata:
      namespace: default
      name: traefik
      labels:
        app: traefik
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: traefik
      template:
        metadata:
          labels:
            app: traefik
        spec:
          hostNetwork: true
          serviceAccountName: traefik-ingress-controller
          containers:
            - name: traefik
              image: traefik:v2.9
              args:
                - --api.insecure
                - --accesslog
                - --entrypoints.web.Address=:80
                - --entrypoints.websecure.Address=:443
                - --providers.kubernetescrd
              ports:
                - name: web
                  containerPort: 8000
                  # hostPort: 80
                - name: websecure
                  containerPort: 4443
                  # hostPort: 443
                - name: admin
                  containerPort: 8080
                  # hostPort: 8080
              securityContext:
                capabilities:
                  drop:
                  - ALL
                  add:
                  - NET_BIND_SERVICE
    ---
    apiVersion: v1
    kind: Service
    metadata:
      name: traefik
    spec:
      ports:
        - protocol: TCP
          name: web
          port: 80
        - protocol: TCP
          name: admin
          port: 8080
        - protocol: TCP
          name: websecure
          port: 443
      selector:
        app: traefik
    

    traefik-whoami.yaml:

    kind: Deployment
    apiVersion: apps/v1
    metadata:
      namespace: default
      name: whoami
      labels:
        app: whoami
    spec:
      replicas: 2
      selector:
        matchLabels:
          app: whoami
      template:
        metadata:
          labels:
            app: whoami
        spec:
          containers:
            - name: whoami
              image: traefik/whoami
              ports:
                - name: web
                  containerPort: 80
    ---
    apiVersion: v1
    kind: Service
    metadata:
      name: whoami
    spec:
      ports:
        - protocol: TCP
          name: web
          port: 80
      selector:
        app: whoami
    ---
    apiVersion: traefik.containo.us/v1alpha1
    kind: IngressRoute
    metadata:
      name: simpleingressroute
      namespace: default
    spec:
      entryPoints:
        - web
      routes:
      - match: PathPrefix(`/notls`)
        kind: Rule
        services:
        - name: whoami
          port: 80
    

    I was able to get a simple container working with traefik in kubernetes at:

    echo `minikube ip`/notls