title: 308 Redirect Loop with ExternalName Service Using Ingress-NGINX
body: <p>I'm using <a href="https://kubernetes.github.io/ingress-nginx/" rel="nofollow noreferrer">ingress-nginx-controller</a> (0.32.0) and am attempting to point an ExternalName service at a URL and yet it’s stuck in a loop of 308 Redirects. I've seen plenty of issues out there and I figure there’s just one thing off with my configuration. Is there something really small that I'm missing here?</p>
  
  <p>ConfigMap for NGINX Configuration:</p>
  
  <pre><code>kind: ConfigMap
  apiVersion: v1
  metadata:
    name: nginx-configuration
    namespace: ingress-nginx
    labels:
      app.kubernetes.io/name: ingress-nginx
      app.kubernetes.io/part-of: ingress-nginx
  data:
    use-proxy-protocol: "true"
    use-forwarded-headers: "true"
    proxy-real-ip-cidr: "0.0.0.0/0" # restrict this to the IP addresses of ELB
    proxy-read-timeout: "3600"
    proxy-send-timeout: "3600"
    backend-protocol: "HTTPS"
    ssl-redirect: "false"
    http-snippet: |
      map true $pass_access_scheme {
        default "https";
      }
      map true $pass_port {
        default 443;
      }
      server {
        listen 8080 proxy_protocol;
        return 308 https://$host$request_uri;
      }
  </code></pre>
  
  <p>NGINX Service:</p>
  
  <pre><code>kind: Service
  apiVersion: v1
  metadata:
    name: ingress-nginx
    namespace: ingress-nginx
    labels:
      app.kubernetes.io/name: ingress-nginx
      app.kubernetes.io/part-of: ingress-nginx
    annotations:
      service.beta.kubernetes.io/aws-load-balancer-ssl-cert: "XXX"
      service.beta.kubernetes.io/aws-load-balancer-backend-protocol: "tcp"
      service.beta.kubernetes.io/aws-load-balancer-ssl-ports: "https"
      service.beta.kubernetes.io/aws-load-balancer-connection-idle-timeout: "3600"
      service.beta.kubernetes.io/aws-load-balancer-proxy-protocol: "*"
  spec:
    type: LoadBalancer
    selector:
      app.kubernetes.io/name: ingress-nginx
      app.kubernetes.io/part-of: ingress-nginx
    ports:
      - name: http
        port: 80
        targetPort: 8080
      - name: https
        port: 443
        targetPort: http
  </code></pre>
  
  <p>Ingress Definition:</p>
  
  <pre><code>apiVersion: extensions/v1beta1
  kind: Ingress
  metadata:
    name: ingress-members-portal
    namespace: dev
    annotations:
      kubernetes.io/ingress.class: "nginx"
      nginx.ingress.kubernetes.io/use-regex: "true"
  spec:
    rules:
    - host: foo-111.dev.bar.com
      http:
        paths:
        - path: /login
          backend:
            serviceName: foo-service
            servicePort: 80
  </code></pre>
  
  <p>ExternalName Service:</p>
  
  <pre><code>apiVersion: v1
  kind: Service
  metadata:
    name: foo-service
  spec:
    type: ExternalName
    externalName: foo.staging.bar.com
  selector:
    app: foo
  </code></pre>
  
  <p><strong>EDIT</strong></p>
  
  <p>I figured it out! I wanted to point to a service in another namespace, so I changed the ExternalName service to this:</p>
  
  <pre><code>apiVersion: v1
  kind: Service
  metadata:
    name: foo-service
  spec:
    type: ExternalName
    externalName: foo-service.staging.svc.cluster.local
  ports:
  - port: 80
    protocol: TCP
    targetPort: 80
  selector:
    app: foo
  </code></pre>