How do I add a service and traefik ingress to an EKS cluster?












1















Notes



I am trying to deploy a service and ingress for a demo service (from 'Kubernetes in Action') to an AWS EKS cluster in which the traefik ingress controller has been Helm installed.



I am able to access the traefik dashboard from the traefik.example.com hostname after manually adding the IP address of the AWS ELB provisioned by traefik to that hostname in my local /etc/hosts file.



If I describe the service and ingress of the traefik-dashboard:



$ kubectl describe svc -n kube-system traefik-dashboard
Name: traefik-dashboard
Namespace: kube-system
Labels: app=traefik
chart=traefik-1.52.6
heritage=Tiller
release=traefik
Annotations: <none>
Selector: app=traefik,release=traefik
Type: ClusterIP
IP: 10.100.164.81
Port: <unset> 80/TCP
TargetPort: 8080/TCP
Endpoints: 172.31.27.70:8080
Session Affinity: None
Events: <none>

$ kubectl describe ing -n kube-system traefik-dashboard
Name: traefik-dashboard
Namespace: kube-system
Address:
Default backend: default-http-backend:80 (<none>)
Rules:
Host Path Backends
---- ---- --------
traefik.example.com
traefik-dashboard:80 (172.31.27.70:8080)
Annotations:
Events: <none>


The service and ingress controller seem to be using the running traefik-575cc584fb-v4mfn pod in the kube-system namespace.



Given this info and looking at the traefik docs, I try to expose a demo service through its ingress with the following YAML:



apiVersion: apps/v1beta2
kind: ReplicaSet
metadata:
name: kubia
spec:
replicas: 3
selector:
matchLabels:
app: kubia
template:
metadata:
labels:
app: kubia
spec:
containers:
- name: kubia
image: luksa/kubia

---

apiVersion: v1
kind: Service
metadata:
name: kubia
namespace: default
spec:
selector:
app: traefik
release: traefik
ports:
- name: web
port: 80
targetPort: 8080

---

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: kubia
namespace: default
spec:
rules:
- host: kubia.int
http:
paths:
- path: /
backend:
serviceName: kubia
servicePort: web


After applying this, I am unable to access the kubia service from the kubia.int hostname after manually adding the IP address of the AWS ELB provisioned by traefik to that hostname in my local /etc/hosts file. Instead, I get a Service Unavailable in the response. Describing the created resources shows some differing info.



$ kubectl describe svc kubia
Name: kubia
Namespace: default
Labels: <none>
Annotations: kubectl.kubernetes.io/last-applied-configuration:
{"apiVersion":"v1","kind":"Service","metadata":{"annotations":{},"name":"kubia","namespace":"default"},"spec":{"ports":[{"name":"web","por...
Selector: app=traefik,release=traefik
Type: ClusterIP
IP: 10.100.142.243
Port: web 80/TCP
TargetPort: 8080/TCP
Endpoints: <none>
Session Affinity: None
Events: <none>

$ kubectl describe ing kubia
Name: kubia
Namespace: default
Address:
Default backend: default-http-backend:80 (<none>)
Rules:
Host Path Backends
---- ---- --------
kubia.int
/ kubia:web (<none>)
Annotations:
kubectl.kubernetes.io/last-applied-configuration: {"apiVersion":"extensions/v1beta1","kind":"Ingress","metadata":{"annotations":{},"name":"kubia","namespace":"default"},"spec":{"rules":[{"host":"kubia.int","http":{"paths":[{"backend":{"serviceName":"kubia","servicePort":"web"},"path":"/"}]}}]}}

Events: <none>


I also notice that the demo kubia service has no endpoints, and the corresponding ingress shows no available backends.



Another thing I notice is that the demo kubia service and ingress is in the default namespace, while the traefik-dashboard service and ingress are in the kube-system namespace.



Does anything jump out to anyone? Any suggestions on the best way to diagnose it?



Many thanks in advance!










share|improve this question





























    1















    Notes



    I am trying to deploy a service and ingress for a demo service (from 'Kubernetes in Action') to an AWS EKS cluster in which the traefik ingress controller has been Helm installed.



    I am able to access the traefik dashboard from the traefik.example.com hostname after manually adding the IP address of the AWS ELB provisioned by traefik to that hostname in my local /etc/hosts file.



    If I describe the service and ingress of the traefik-dashboard:



    $ kubectl describe svc -n kube-system traefik-dashboard
    Name: traefik-dashboard
    Namespace: kube-system
    Labels: app=traefik
    chart=traefik-1.52.6
    heritage=Tiller
    release=traefik
    Annotations: <none>
    Selector: app=traefik,release=traefik
    Type: ClusterIP
    IP: 10.100.164.81
    Port: <unset> 80/TCP
    TargetPort: 8080/TCP
    Endpoints: 172.31.27.70:8080
    Session Affinity: None
    Events: <none>

    $ kubectl describe ing -n kube-system traefik-dashboard
    Name: traefik-dashboard
    Namespace: kube-system
    Address:
    Default backend: default-http-backend:80 (<none>)
    Rules:
    Host Path Backends
    ---- ---- --------
    traefik.example.com
    traefik-dashboard:80 (172.31.27.70:8080)
    Annotations:
    Events: <none>


    The service and ingress controller seem to be using the running traefik-575cc584fb-v4mfn pod in the kube-system namespace.



    Given this info and looking at the traefik docs, I try to expose a demo service through its ingress with the following YAML:



    apiVersion: apps/v1beta2
    kind: ReplicaSet
    metadata:
    name: kubia
    spec:
    replicas: 3
    selector:
    matchLabels:
    app: kubia
    template:
    metadata:
    labels:
    app: kubia
    spec:
    containers:
    - name: kubia
    image: luksa/kubia

    ---

    apiVersion: v1
    kind: Service
    metadata:
    name: kubia
    namespace: default
    spec:
    selector:
    app: traefik
    release: traefik
    ports:
    - name: web
    port: 80
    targetPort: 8080

    ---

    apiVersion: extensions/v1beta1
    kind: Ingress
    metadata:
    name: kubia
    namespace: default
    spec:
    rules:
    - host: kubia.int
    http:
    paths:
    - path: /
    backend:
    serviceName: kubia
    servicePort: web


    After applying this, I am unable to access the kubia service from the kubia.int hostname after manually adding the IP address of the AWS ELB provisioned by traefik to that hostname in my local /etc/hosts file. Instead, I get a Service Unavailable in the response. Describing the created resources shows some differing info.



    $ kubectl describe svc kubia
    Name: kubia
    Namespace: default
    Labels: <none>
    Annotations: kubectl.kubernetes.io/last-applied-configuration:
    {"apiVersion":"v1","kind":"Service","metadata":{"annotations":{},"name":"kubia","namespace":"default"},"spec":{"ports":[{"name":"web","por...
    Selector: app=traefik,release=traefik
    Type: ClusterIP
    IP: 10.100.142.243
    Port: web 80/TCP
    TargetPort: 8080/TCP
    Endpoints: <none>
    Session Affinity: None
    Events: <none>

    $ kubectl describe ing kubia
    Name: kubia
    Namespace: default
    Address:
    Default backend: default-http-backend:80 (<none>)
    Rules:
    Host Path Backends
    ---- ---- --------
    kubia.int
    / kubia:web (<none>)
    Annotations:
    kubectl.kubernetes.io/last-applied-configuration: {"apiVersion":"extensions/v1beta1","kind":"Ingress","metadata":{"annotations":{},"name":"kubia","namespace":"default"},"spec":{"rules":[{"host":"kubia.int","http":{"paths":[{"backend":{"serviceName":"kubia","servicePort":"web"},"path":"/"}]}}]}}

    Events: <none>


    I also notice that the demo kubia service has no endpoints, and the corresponding ingress shows no available backends.



    Another thing I notice is that the demo kubia service and ingress is in the default namespace, while the traefik-dashboard service and ingress are in the kube-system namespace.



    Does anything jump out to anyone? Any suggestions on the best way to diagnose it?



    Many thanks in advance!










    share|improve this question



























      1












      1








      1








      Notes



      I am trying to deploy a service and ingress for a demo service (from 'Kubernetes in Action') to an AWS EKS cluster in which the traefik ingress controller has been Helm installed.



      I am able to access the traefik dashboard from the traefik.example.com hostname after manually adding the IP address of the AWS ELB provisioned by traefik to that hostname in my local /etc/hosts file.



      If I describe the service and ingress of the traefik-dashboard:



      $ kubectl describe svc -n kube-system traefik-dashboard
      Name: traefik-dashboard
      Namespace: kube-system
      Labels: app=traefik
      chart=traefik-1.52.6
      heritage=Tiller
      release=traefik
      Annotations: <none>
      Selector: app=traefik,release=traefik
      Type: ClusterIP
      IP: 10.100.164.81
      Port: <unset> 80/TCP
      TargetPort: 8080/TCP
      Endpoints: 172.31.27.70:8080
      Session Affinity: None
      Events: <none>

      $ kubectl describe ing -n kube-system traefik-dashboard
      Name: traefik-dashboard
      Namespace: kube-system
      Address:
      Default backend: default-http-backend:80 (<none>)
      Rules:
      Host Path Backends
      ---- ---- --------
      traefik.example.com
      traefik-dashboard:80 (172.31.27.70:8080)
      Annotations:
      Events: <none>


      The service and ingress controller seem to be using the running traefik-575cc584fb-v4mfn pod in the kube-system namespace.



      Given this info and looking at the traefik docs, I try to expose a demo service through its ingress with the following YAML:



      apiVersion: apps/v1beta2
      kind: ReplicaSet
      metadata:
      name: kubia
      spec:
      replicas: 3
      selector:
      matchLabels:
      app: kubia
      template:
      metadata:
      labels:
      app: kubia
      spec:
      containers:
      - name: kubia
      image: luksa/kubia

      ---

      apiVersion: v1
      kind: Service
      metadata:
      name: kubia
      namespace: default
      spec:
      selector:
      app: traefik
      release: traefik
      ports:
      - name: web
      port: 80
      targetPort: 8080

      ---

      apiVersion: extensions/v1beta1
      kind: Ingress
      metadata:
      name: kubia
      namespace: default
      spec:
      rules:
      - host: kubia.int
      http:
      paths:
      - path: /
      backend:
      serviceName: kubia
      servicePort: web


      After applying this, I am unable to access the kubia service from the kubia.int hostname after manually adding the IP address of the AWS ELB provisioned by traefik to that hostname in my local /etc/hosts file. Instead, I get a Service Unavailable in the response. Describing the created resources shows some differing info.



      $ kubectl describe svc kubia
      Name: kubia
      Namespace: default
      Labels: <none>
      Annotations: kubectl.kubernetes.io/last-applied-configuration:
      {"apiVersion":"v1","kind":"Service","metadata":{"annotations":{},"name":"kubia","namespace":"default"},"spec":{"ports":[{"name":"web","por...
      Selector: app=traefik,release=traefik
      Type: ClusterIP
      IP: 10.100.142.243
      Port: web 80/TCP
      TargetPort: 8080/TCP
      Endpoints: <none>
      Session Affinity: None
      Events: <none>

      $ kubectl describe ing kubia
      Name: kubia
      Namespace: default
      Address:
      Default backend: default-http-backend:80 (<none>)
      Rules:
      Host Path Backends
      ---- ---- --------
      kubia.int
      / kubia:web (<none>)
      Annotations:
      kubectl.kubernetes.io/last-applied-configuration: {"apiVersion":"extensions/v1beta1","kind":"Ingress","metadata":{"annotations":{},"name":"kubia","namespace":"default"},"spec":{"rules":[{"host":"kubia.int","http":{"paths":[{"backend":{"serviceName":"kubia","servicePort":"web"},"path":"/"}]}}]}}

      Events: <none>


      I also notice that the demo kubia service has no endpoints, and the corresponding ingress shows no available backends.



      Another thing I notice is that the demo kubia service and ingress is in the default namespace, while the traefik-dashboard service and ingress are in the kube-system namespace.



      Does anything jump out to anyone? Any suggestions on the best way to diagnose it?



      Many thanks in advance!










      share|improve this question
















      Notes



      I am trying to deploy a service and ingress for a demo service (from 'Kubernetes in Action') to an AWS EKS cluster in which the traefik ingress controller has been Helm installed.



      I am able to access the traefik dashboard from the traefik.example.com hostname after manually adding the IP address of the AWS ELB provisioned by traefik to that hostname in my local /etc/hosts file.



      If I describe the service and ingress of the traefik-dashboard:



      $ kubectl describe svc -n kube-system traefik-dashboard
      Name: traefik-dashboard
      Namespace: kube-system
      Labels: app=traefik
      chart=traefik-1.52.6
      heritage=Tiller
      release=traefik
      Annotations: <none>
      Selector: app=traefik,release=traefik
      Type: ClusterIP
      IP: 10.100.164.81
      Port: <unset> 80/TCP
      TargetPort: 8080/TCP
      Endpoints: 172.31.27.70:8080
      Session Affinity: None
      Events: <none>

      $ kubectl describe ing -n kube-system traefik-dashboard
      Name: traefik-dashboard
      Namespace: kube-system
      Address:
      Default backend: default-http-backend:80 (<none>)
      Rules:
      Host Path Backends
      ---- ---- --------
      traefik.example.com
      traefik-dashboard:80 (172.31.27.70:8080)
      Annotations:
      Events: <none>


      The service and ingress controller seem to be using the running traefik-575cc584fb-v4mfn pod in the kube-system namespace.



      Given this info and looking at the traefik docs, I try to expose a demo service through its ingress with the following YAML:



      apiVersion: apps/v1beta2
      kind: ReplicaSet
      metadata:
      name: kubia
      spec:
      replicas: 3
      selector:
      matchLabels:
      app: kubia
      template:
      metadata:
      labels:
      app: kubia
      spec:
      containers:
      - name: kubia
      image: luksa/kubia

      ---

      apiVersion: v1
      kind: Service
      metadata:
      name: kubia
      namespace: default
      spec:
      selector:
      app: traefik
      release: traefik
      ports:
      - name: web
      port: 80
      targetPort: 8080

      ---

      apiVersion: extensions/v1beta1
      kind: Ingress
      metadata:
      name: kubia
      namespace: default
      spec:
      rules:
      - host: kubia.int
      http:
      paths:
      - path: /
      backend:
      serviceName: kubia
      servicePort: web


      After applying this, I am unable to access the kubia service from the kubia.int hostname after manually adding the IP address of the AWS ELB provisioned by traefik to that hostname in my local /etc/hosts file. Instead, I get a Service Unavailable in the response. Describing the created resources shows some differing info.



      $ kubectl describe svc kubia
      Name: kubia
      Namespace: default
      Labels: <none>
      Annotations: kubectl.kubernetes.io/last-applied-configuration:
      {"apiVersion":"v1","kind":"Service","metadata":{"annotations":{},"name":"kubia","namespace":"default"},"spec":{"ports":[{"name":"web","por...
      Selector: app=traefik,release=traefik
      Type: ClusterIP
      IP: 10.100.142.243
      Port: web 80/TCP
      TargetPort: 8080/TCP
      Endpoints: <none>
      Session Affinity: None
      Events: <none>

      $ kubectl describe ing kubia
      Name: kubia
      Namespace: default
      Address:
      Default backend: default-http-backend:80 (<none>)
      Rules:
      Host Path Backends
      ---- ---- --------
      kubia.int
      / kubia:web (<none>)
      Annotations:
      kubectl.kubernetes.io/last-applied-configuration: {"apiVersion":"extensions/v1beta1","kind":"Ingress","metadata":{"annotations":{},"name":"kubia","namespace":"default"},"spec":{"rules":[{"host":"kubia.int","http":{"paths":[{"backend":{"serviceName":"kubia","servicePort":"web"},"path":"/"}]}}]}}

      Events: <none>


      I also notice that the demo kubia service has no endpoints, and the corresponding ingress shows no available backends.



      Another thing I notice is that the demo kubia service and ingress is in the default namespace, while the traefik-dashboard service and ingress are in the kube-system namespace.



      Does anything jump out to anyone? Any suggestions on the best way to diagnose it?



      Many thanks in advance!







      kubernetes traefik-ingress aws-eks






      share|improve this question















      share|improve this question













      share|improve this question




      share|improve this question








      edited Nov 13 '18 at 22:02









      Rico

      27.3k94865




      27.3k94865










      asked Nov 13 '18 at 21:02









      Allen GoochAllen Gooch

      77117




      77117
























          1 Answer
          1






          active

          oldest

          votes


















          1














          It would seem that you are missing the kubernetes.io/ingress.class: traefik that tells your Traefik ingress controller to serve for that Ingress definition.



          apiVersion: extensions/v1beta1
          kind: Ingress
          metadata:
          name: kubia
          namespace: default
          annotations:
          kubernetes.io/ingress.class: traefik
          spec:
          rules:
          - host: kubia.int
          http:
          paths:
          - path: /
          backend:
          serviceName: kubia
          servicePort: web


          If you look at the examples in the docs you can see that the only Ingress that doesn't have annotation is traefik-web-ui that points to the Traefik Web UI.






          share|improve this answer
























          • That was indeed it. Thanks!

            – Allen Gooch
            Dec 4 '18 at 20:23











          Your Answer






          StackExchange.ifUsing("editor", function () {
          StackExchange.using("externalEditor", function () {
          StackExchange.using("snippets", function () {
          StackExchange.snippets.init();
          });
          });
          }, "code-snippets");

          StackExchange.ready(function() {
          var channelOptions = {
          tags: "".split(" "),
          id: "1"
          };
          initTagRenderer("".split(" "), "".split(" "), channelOptions);

          StackExchange.using("externalEditor", function() {
          // Have to fire editor after snippets, if snippets enabled
          if (StackExchange.settings.snippets.snippetsEnabled) {
          StackExchange.using("snippets", function() {
          createEditor();
          });
          }
          else {
          createEditor();
          }
          });

          function createEditor() {
          StackExchange.prepareEditor({
          heartbeatType: 'answer',
          autoActivateHeartbeat: false,
          convertImagesToLinks: true,
          noModals: true,
          showLowRepImageUploadWarning: true,
          reputationToPostImages: 10,
          bindNavPrevention: true,
          postfix: "",
          imageUploader: {
          brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
          contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
          allowUrls: true
          },
          onDemand: true,
          discardSelector: ".discard-answer"
          ,immediatelyShowMarkdownHelp:true
          });


          }
          });














          draft saved

          draft discarded


















          StackExchange.ready(
          function () {
          StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53289455%2fhow-do-i-add-a-service-and-traefik-ingress-to-an-eks-cluster%23new-answer', 'question_page');
          }
          );

          Post as a guest















          Required, but never shown

























          1 Answer
          1






          active

          oldest

          votes








          1 Answer
          1






          active

          oldest

          votes









          active

          oldest

          votes






          active

          oldest

          votes









          1














          It would seem that you are missing the kubernetes.io/ingress.class: traefik that tells your Traefik ingress controller to serve for that Ingress definition.



          apiVersion: extensions/v1beta1
          kind: Ingress
          metadata:
          name: kubia
          namespace: default
          annotations:
          kubernetes.io/ingress.class: traefik
          spec:
          rules:
          - host: kubia.int
          http:
          paths:
          - path: /
          backend:
          serviceName: kubia
          servicePort: web


          If you look at the examples in the docs you can see that the only Ingress that doesn't have annotation is traefik-web-ui that points to the Traefik Web UI.






          share|improve this answer
























          • That was indeed it. Thanks!

            – Allen Gooch
            Dec 4 '18 at 20:23
















          1














          It would seem that you are missing the kubernetes.io/ingress.class: traefik that tells your Traefik ingress controller to serve for that Ingress definition.



          apiVersion: extensions/v1beta1
          kind: Ingress
          metadata:
          name: kubia
          namespace: default
          annotations:
          kubernetes.io/ingress.class: traefik
          spec:
          rules:
          - host: kubia.int
          http:
          paths:
          - path: /
          backend:
          serviceName: kubia
          servicePort: web


          If you look at the examples in the docs you can see that the only Ingress that doesn't have annotation is traefik-web-ui that points to the Traefik Web UI.






          share|improve this answer
























          • That was indeed it. Thanks!

            – Allen Gooch
            Dec 4 '18 at 20:23














          1












          1








          1







          It would seem that you are missing the kubernetes.io/ingress.class: traefik that tells your Traefik ingress controller to serve for that Ingress definition.



          apiVersion: extensions/v1beta1
          kind: Ingress
          metadata:
          name: kubia
          namespace: default
          annotations:
          kubernetes.io/ingress.class: traefik
          spec:
          rules:
          - host: kubia.int
          http:
          paths:
          - path: /
          backend:
          serviceName: kubia
          servicePort: web


          If you look at the examples in the docs you can see that the only Ingress that doesn't have annotation is traefik-web-ui that points to the Traefik Web UI.






          share|improve this answer













          It would seem that you are missing the kubernetes.io/ingress.class: traefik that tells your Traefik ingress controller to serve for that Ingress definition.



          apiVersion: extensions/v1beta1
          kind: Ingress
          metadata:
          name: kubia
          namespace: default
          annotations:
          kubernetes.io/ingress.class: traefik
          spec:
          rules:
          - host: kubia.int
          http:
          paths:
          - path: /
          backend:
          serviceName: kubia
          servicePort: web


          If you look at the examples in the docs you can see that the only Ingress that doesn't have annotation is traefik-web-ui that points to the Traefik Web UI.







          share|improve this answer












          share|improve this answer



          share|improve this answer










          answered Nov 13 '18 at 22:23









          RicoRico

          27.3k94865




          27.3k94865













          • That was indeed it. Thanks!

            – Allen Gooch
            Dec 4 '18 at 20:23



















          • That was indeed it. Thanks!

            – Allen Gooch
            Dec 4 '18 at 20:23

















          That was indeed it. Thanks!

          – Allen Gooch
          Dec 4 '18 at 20:23





          That was indeed it. Thanks!

          – Allen Gooch
          Dec 4 '18 at 20:23


















          draft saved

          draft discarded




















































          Thanks for contributing an answer to Stack Overflow!


          • Please be sure to answer the question. Provide details and share your research!

          But avoid



          • Asking for help, clarification, or responding to other answers.

          • Making statements based on opinion; back them up with references or personal experience.


          To learn more, see our tips on writing great answers.




          draft saved


          draft discarded














          StackExchange.ready(
          function () {
          StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53289455%2fhow-do-i-add-a-service-and-traefik-ingress-to-an-eks-cluster%23new-answer', 'question_page');
          }
          );

          Post as a guest















          Required, but never shown





















































          Required, but never shown














          Required, but never shown












          Required, but never shown







          Required, but never shown

































          Required, but never shown














          Required, but never shown












          Required, but never shown







          Required, but never shown







          Popular posts from this blog

          Xamarin.iOS Cant Deploy on Iphone

          Glorious Revolution

          Dulmage-Mendelsohn matrix decomposition in Python