问:
sbrk - Valgrind doesn't report the memory leak
I wrote this little version of malloc (no free):

#include <cstdio>
#include <cstddef>
#include <unistd.h>

#define word_size sizeof(intptr_t)
#define align(n) ((n + word_size - 1) & ~(word_size - 1))

void* my_malloc(size_t size) {
    void* p = sbrk(0);
    printf("before allocation: %p\n", p);
    if (sbrk(align(size)) == (void*) -1) {
        // failed to allocate memory
        return NULL;
    }
    printf("after allocation: %p\n", sbrk(0));
    return p;
}

int main() {
    int* foo = (int*) my_malloc(1);
    *foo = 100;
    printf("after allocation outside: %p\n", sbrk(0));
}
```

<p>Here is the output of the code:</p>

```before allocation: 0x1796000
after allocation: 0x1796008
after allocation outside: 0x1796008
```

<p>As you can see, the memory allocated by <code>my_malloc</code> has not been freed.
Yet when I run it through <code>valgrind</code> with this:</p>

```valgrind --leak-check=yes ./main
```

<p>I get this:</p>

```==1592== Memcheck, a memory error detector
==1592== Copyright (C) 2002-2017, and GNU GPL'd, by Julian Seward et al.
==1592== Using Valgrind-3.13.0 and LibVEX; rerun with -h for copyright info
==1592== Command: ./main
==1592== HEAP SUMMARY:
==1592==     in use at exit: 0 bytes in 0 blocks
==1592==   total heap usage: 2 allocs, 2 frees, 73,728 bytes allocated
==1592==
==1592== All heap blocks were freed -- no leaks are possible
==1592==
==1592== For counts of detected and suppressed errors, rerun with: -v
==1592== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 0 from 0)
```

As you can see, valgrind didn't find any memory leaks! Am I using valgrind incorrectly, or is this a bug?

答:
The first answer is not very accurate.

Short answer for the OP: Valgrind won't detect a leak in custom memory pools unless you tell it more about your allocator.

Long answer.

When you run valgrind there are two executables that will run. Firstly valgrind itself. This is a small application that will read a few command line arguments, set a few environment variables then look at the guest application to determine its bitness and then execve the appropriate tool, for instance memcheck-x86-freebsd.

The tool does not link with anything. Not libc, not even the libc startup code. The entry point is in assembler that creates a new stack and starts valgrind_main. Since the tool links with nothing, it has to implement for itself all of the C runtime functions that it needs or wants to use. This includes some functions that compilers may implicitly generate. For instance, code that does struct assignment may result in the compiler generating a call to memcpy(). This is what the quoted text is referring to. These functions are also provided by the tool rather than libc. This is not related to the redirection mechanism.

So, redirection. valgrind will have set LD_PRELOAD (or a platform specific version such as LD_32_PRELOAD). This will point to a 'core' component (such as vgpreload_core-x86-freebsd.so and a tool component such as vgpreload_memcheck-x86-freebsd.so. The tool does the job of the link loader, and will mmap these files into memory. During this process it will read the Elf information and note any "special" functions. These functions use an elaborate name mangling system, and the tool will recognize that, for instance, _vgr10010ZU_libcZdsoZa_malloc is a replacement for malloc in libc. The addresses of these redirection functions are stored and will be used when the guest executes. This mechanism also means that different tools can redirect different functions. For instance, memcheck needs to redirect the malloc and new families of functions whilst DRD and Helgrind need to redirect pthread_* and sema_*.

For the other end of the redirection, the tool will also see the target function(s) when it loads libc (and the executable binary itself, which covers
the case of static linking).

The redirection does not fully replace the target function, it just acts as a shim allowing the tool to track what the function has requested.

Now to get right back to sbrk. Valgrind does know about this, but only as a syscall. It will check that the size argument does not come from invalid storage. memcheck won't track the memory as it does with malloc. If you use massif with --pages-as-heap=yes then it will profile the sbrk usage.

If you want memcheck to validate your custom allocation functions then you have to do one of two things.

Use standard names and the --soname-synonyms argument

Use the client request mechanism.

UPDATE:
The default [since Release 3.12.0 (20 October 2016)] has changed to look for
replacement functions in the test exe, text updated.

Body:
I wrote this little version of malloc (no free):

#include <cstdio>
#include <cstddef>
#include <unistd.h>

#define word_size sizeof(intptr_t)
#define align(n) ((n + word_size - 1) & ~(word_size - 1))

void* my_malloc(size_t size) {
    void* p = sbrk(0);
    printf("before allocation: %p\n", p);
    if (sbrk(align(size)) == (void*) -1) {
        // failed to allocate memory
        return NULL;
    }
    printf("after allocation: %p\n", sbrk(0));
    return p;
}

int main() {
    int* foo = (int*) my_malloc(1);
    *foo = 100;
    printf("after allocation outside: %p\n", sbrk(0));
}

Here is the output of the code:

before allocation: 0x1796000
after allocation: 0x1796008
after allocation outside: 0x1796008

As you can see, the memory allocated by my_malloc has not been freed.
Yet when I run it through valgrind with this:

valgrind --leak-check=yes ./main

I get this:

==1592== Memcheck, a memory error detector
==1592== Copyright (C) 2002-2017, and GNU GPL'd, by Julian Seward et al.
==1592== Using Valgrind-3.13.0 and LibVEX; rerun with -h for copyright info
==1592== Command: ./main
==1592== HEAP SUMMARY:
==1592==     in use at exit: 0 bytes in 0 blocks
==1592==   total heap usage: 2 allocs, 2 frees, 73,728 bytes allocated
==1592==
==1592== All heap blocks were freed -- no leaks are possible
==1592==
==1592== For counts of detected and suppressed errors, rerun with: -v
==1592== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 0 from 0)

As you can see, valgrind didn't find any memory leaks! Am I using valgrind incorrectly, or is this a bug?


来源: stackexchange

问:
Try to integrate LinkedIn in iPhone application
I have download the source from https://github.com/ResultsDirect/LinkedIn-iPhone . Demo working fine, and try to use in my application.

I have followed all the steps already whatever required as mention here in post ...

But I have getting the error

```<code>"_OBJC_CLASS_$_RDLinkedInEngine", referenced from:
"_OBJC_CLASS_$_RDLinkedInAuthorizationController", referenced from:
</code>```

When I comment the lines of RDLinkedInEngine and RDLinkedInAuthorizationController then error are removed

```<code>- (void)loadView {
    [super loadView];
//    rdEngine = [[RDLinkedInEngine engineWithConsumerKey:kOAuthConsumerKey consumerSecret:kOAuthConsumerSecret delegate:self] retain];
}
- (void)viewDidAppear:(BOOL)animated {
    [super viewDidAppear:animated];
//    if( !rdHasAppeared ) {
//        UIViewController* controller = [RDLinkedInAuthorizationController authorizationControllerWithEngine:rdEngine delegate:self];
//        if( controller ) {
//            [self presentModalViewController:controller animated:YES];
//            rdHasAppeared = YES;
//        }
//        else {
//            NSLog(@"Already authenticated");
//        }
//    }
}
</code>```

I my application I have already integrated MGTwitterEngine from source https://github.com/bengottlieb/Twitter-OAuth-iPhone  Which is wokring ok.

Amit Battan

答: I have gone through the same issue. It can be solved by setting Library Dependency. Select project target and then select general. There you will find Direct dependencies. Add LinkedInLibrary from LinkedInClientLibrary.xcodeProject</p>

ContentLicense: CC BY-SA 2.5

Body:
I have download the source from https://github.com/ResultsDirect/LinkedIn-iPhone . Demo working fine, and try to use in my application.

I have followed all the steps already whatever required as mention here in post ...

But I have getting the error

"_OBJC_CLASS_$_RDLinkedInEngine", referenced from:
"_OBJC_CLASS_$_RDLinkedInAuthorizationController", referenced from:

When I comment the lines of RDLinkedInEngine and RDLinkedInAuthorizationController then error are removed

- (void)loadView {
    [super loadView];
//    rdEngine = [[RDLinkedInEngine engineWithConsumerKey:kOAuthConsumerKey consumerSecret:kOAuthConsumerSecret delegate:self] retain];
}
- (void)viewDidAppear:(BOOL)animated {
    [super viewDidAppear:animated];
//    if( !rdHasAppeared ) {
//        UIViewController* controller = [RDLinkedInAuthorizationController authorizationControllerWithEngine:rdEngine delegate:self];
//        if( controller ) {
//            [self presentModalViewController:controller animated:YES];
//            rdHasAppeared = YES;
//        }
//        else {
//            NSLog(@"Already authenticated");
//        }
//    }
}

I my application I have already integrated MGTwitterEngine from source https://github.com/bengottlieb/Twitter-OAuth-iPhone  Which is wokring ok.

Amit Battan

ContentLicense: CC BY-SA 3.0


问:
LinkedIn Share Button - Doesn't recognize og:image
I'm trying to share a page with og tags.
One of the tags is og:image as described in the following link:
https://developer.linkedin.com/documents/setting-display-tags-shares
The image I share is legal.

For some reason linkedin doesn't show the image once I'm sharing the page through
LinkedIn Share button (although it shows the other tags' values).

My og:image tag:

meta property="og:image" content="http://mywebsite.comm/difa2fz.png"

Any idea?

答:
According to the Official LinkedIn OG Tags Sharing Documentation, the following are required for the og:image...

Max file size: 5 MB

Minimum image dimensions: 1200 (w) x 627 (h) pixels

Recommended ratio: 1.91:1

Have doubts about your link?  You can submit your share URL to the LinkedIn Post Inspector, which will analyze, debug, and explain any problems you have in your share URL, including og tag issues.

You provided us with your code, but not the image, so, you'll need to make sure your image conforms to the above limits.  In addition, since I can't see all the code, I'd also add in the following informal requirements...

Is your og:image tag in the ... block of your HTML?

Does your page have a ... block?

Here's a demo site I host where the LinkedIn share URL works.  This is purely a demo site, and it has no monetary value (its stated purpose is to "sort words").  SortWords.com, and the share URL is: https://www.linkedin.com/sharing/share-offsite/?url=http%3A%2F%2Fwww.sortwords.com.  Works great:

Body:
According to the Official LinkedIn OG Tags Sharing Documentation, the following are required for the og:image...

Max file size: 5 MB

Minimum image dimensions: 1200 (w) x 627 (h) pixels

Recommended ratio: 1.91:1

Have doubts about your link?  You can submit your share URL to the LinkedIn Post Inspector, which will analyze, debug, and explain any problems you have in your share URL, including og tag issues.

You provided us with your code, but not the image, so, you'll need to make sure your image conforms to the above limits.  In addition, since I can't see all the code, I'd also add in the following informal requirements...

Is your og:image tag in the <header>...</header> block of your HTML?

Does your page have a <html>...</html> block?

Here's a demo site I host where the LinkedIn share URL works.  This is purely a demo site, and it has no monetary value (its stated purpose is to "sort words").  SortWords.com, and the share URL is: https://www.linkedin.com/sharing/share-offsite/?url=http%3A%2F%2Fwww.sortwords.com.  Works great:

ContentLicense: CC BY-SA 4.0


问:
How to supply the password as an argument in realm join to active directory command
I am trying to automate few areas like joining the linux server to active directory. To join the server to AD, I am using the following command:

realm join -U <Username> exmaple.com

The above command will prompt for a password which need to provided during the execution time. My requirement is to supply the password as an argument in realm join command just like

realm join -U <Username> -P <Password> example.com --> This is not working

Can someone help me to figure out the way to supply the password as an argument here ?

答:
This is resolved. Following is the answer

echo $password | realm join -U <Username> example.com

replace $password with your actual password


问:
Can getstream be installed with node v8?
I need to use getstream.io on firebase function. As firebase function is using the node v8, I cannot deploy the function with integration with getstream as installation of getstream requires node > v10.</p>

答:
The Node.js 8.x Maintenance LTS cycle expired on December 31, 2019. That's why it's highly recommended to upgrade.

You can select node 10 with "engines": {"node": "10"} in your function runtime.

See details in docs: https://firebase.google.com/docs/functions/manage-functions#set_runtime_options


问:
Getting java.lang.NoClassDefFoundError error when writing Excel file
I will be developing a workflow where I would be needed to fetch some data from Oracle DB and write the ResultSet in Excel file. Before starting that, I would like to do some tests. However, I am getting the following runtime exception java.lang.NoClassDefFoundError. Details can be found below. I know I am missing something very silly but I am struggling to find that out. I appreciate your help.

```<code>Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/commons/collections4/ListValuedMap
    at DatabaseConnPkg.DatabaseConnClass.main(DatabaseConnClass.java:32)
Caused by: java.lang.ClassNotFoundException: org.apache.commons.collections4.ListValuedMap
    at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
    ... 1 more
C:\Users\Erfan\AppData\Local\NetBeans\Cache\8.2\executor-snippets\run.xml:53: Java returned: 1
BUILD FAILED (total time: 3 seconds)
</code>```

These are the external jars that I am using

poi-4.1.2.jar

poi-ooxml-4.1.2.jar

This is the code that I am working with

```<code>Connection connection = null;
    PreparedStatement preparedStatement = null;
    ResultSet resultSet = null;
    ResultSetMetaData resultSetMetaData = null;

    try {
        Class.forName("oracle.jdbc.driver.OracleDriver");
        connection = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:orcl","hr","hr");
        String sql = "select * from countries";
        preparedStatement = connection.prepareStatement(sql);
        resultSet = preparedStatement.executeQuery();
        resultSetMetaData = resultSet.getMetaData();
        XSSFWorkbook workbook = new XSSFWorkbook();
        XSSFSheet spreadSheet = workbook.createSheet();
        XSSFRow row = spreadSheet.createRow(1);
        XSSFCell cell;

        for(int i=0; i<resultSetMetaData.getColumnCount(); i++) {
            cell = row.createCell(i);
            cell.setCellValue(resultSetMetaData.getColumnName(i));
        }

        while(resultSet.next()) {
            row = spreadSheet.createRow(1);
            cell = row.createCell(1);
            cell.setCellValue(resultSet.getString(1));
            cell = row.createCell(2);
            cell.setCellValue(resultSet.getString(2));
            cell = row.createCell(3);
            cell.setCellValue(resultSet.getString(3));

        }

        FileOutputStream fileOutputStream = new FileOutputStream(new File(FILE));
        workbook.write(fileOutputStream);
        fileOutputStream.close();
        System.out.println("exceldatabase.xlsx written successfully");

        //System.out.println(resultSetMetaData.getColumnName(1) + "\t" + resultSetMetaData.getColumnName(2) + "\t" + resultSetMetaData.getColumnName(3));

        /*
        while(resultSet.next()) {
            System.out.println(resultSet.getString(1) + "\t\t" + resultSet.getString(2) + "\t\t" + resultSet.getString(3));
        }
        */

        connection.close();
    } catch (Exception e) {
        e.printStackTrace();
    }
</code>```

答: It seems that you are missing the commons-collections4 dependency, you can get it from here</p>

Body:
I will be developing a workflow where I would be needed to fetch some data from Oracle DB and write the ResultSet in Excel file. Before starting that, I would like to do some tests. However, I am getting the following runtime exception java.lang.NoClassDefFoundError. Details can be found below. I know I am missing something very silly but I am struggling to find that out. I appreciate your help.

Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/commons/collections4/ListValuedMap
    at DatabaseConnPkg.DatabaseConnClass.main(DatabaseConnClass.java:32)
Caused by: java.lang.ClassNotFoundException: org.apache.commons.collections4.ListValuedMap
    at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
    ... 1 more
C:\Users\Erfan\AppData\Local\NetBeans\Cache\8.2\executor-snippets\run.xml:53: Java returned: 1
BUILD FAILED (total time: 3 seconds)

These are the external jars that I am using

poi-4.1.2.jar

poi-ooxml-4.1.2.jar

This is the code that I am working with

Connection connection = null;
    PreparedStatement preparedStatement = null;
    ResultSet resultSet = null;
    ResultSetMetaData resultSetMetaData = null;

    try {
        Class.forName("oracle.jdbc.driver.OracleDriver");
        connection = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:orcl","hr","hr");
        String sql = "select * from countries";
        preparedStatement = connection.prepareStatement(sql);
        resultSet = preparedStatement.executeQuery();
        resultSetMetaData = resultSet.getMetaData();
        XSSFWorkbook workbook = new XSSFWorkbook();
        XSSFSheet spreadSheet = workbook.createSheet();
        XSSFRow row = spreadSheet.createRow(1);
        XSSFCell cell;

        for(int i=0; i<resultSetMetaData.getColumnCount(); i++) {
            cell = row.createCell(i);
            cell.setCellValue(resultSetMetaData.getColumnName(i));
        }

        while(resultSet.next()) {
            row = spreadSheet.createRow(1);
            cell = row.createCell(1);
            cell.setCellValue(resultSet.getString(1));
            cell = row.createCell(2);
            cell.setCellValue(resultSet.getString(2));
            cell = row.createCell(3);
            cell.setCellValue(resultSet.getString(3));

        }

        FileOutputStream fileOutputStream = new FileOutputStream(new File(FILE));
        workbook.write(fileOutputStream);
        fileOutputStream.close();
        System.out.println("exceldatabase.xlsx written successfully");

        //System.out.println(resultSetMetaData.getColumnName(1) + "\t" + resultSetMetaData.getColumnName(2) + "\t" + resultSetMetaData.getColumnName(3));

        /*
        while(resultSet.next()) {
            System.out.println(resultSet.getString(1) + "\t\t" + resultSet.getString(2) + "\t\t" + resultSet.getString(3));
        }
        */

        connection.close();
    } catch (Exception e) {
        e.printStackTrace();
    }


问:
Kubernetes ingress sending requests to 2 different services
Update: I reproduced this in its own repo https://github.com/ericwooley/repro-ingress-issue

I'm trying to setup ingress on minikube with the ingress addon.

I have two services, and deployments

service 1 is email:

kind: Service
apiVersion: v1
metadata:
  name: email
  labels:
    app: email
spec:
  selector:
    app:  email
  ports:
  - name:  http
    port:  8081
    targetPort: http
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: email
spec:
  selector:
    matchLabels:
      app: email
  replicas: 1
  template:
    metadata:
      labels:
        app: email
    spec:
      containers:
      - name: email
        image: ericwooley/auth
        ports:
        - name: http
          containerPort: 8080
```

<p>service 2 is auth</p>

<pre class="lang-yaml prettyprint-override"><code>apiVersion: v1
kind: Service
metadata:
  name: auth
  labels:
    app: auth
spec:
  type: ClusterIP
  ports:
    - port: 8080
      targetPort: http
      name: http
      protocol: TCP
  selector:
    app: auth
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: auth
spec:
  selector:
    matchLabels:
      app: auth
  replicas: 1
  template:
    metadata:
      labels:
        app: auth
    spec:
      restartPolicy: Always
      containers:
        - name: auth
          image: ericwooley/auth
          imagePullPolicy: Never
          ports:
            - name: http
              containerPort: 8080
</code>```

and my ingress

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: entry
spec:
  rules:
  - host: api.tengable.com
    http:
      paths:
      - path: /openapi
        pathType: Prefix
        backend:
          serviceName: auth
          servicePort: http
```

<p>navigating too /openapi sends requests to both services. I can't figure out why it's not all going to the auth service</p>

<p>logs from services:</p>

```[auth-7b56b5dc98-jlzzz auth] ::ffff:172.17.0.2 - GET /openapi/ HTTP/1.1 200 3104 - 29.375 ms
[email-57679f8d9b-75j6r email] ::ffff:172.17.0.2 - GET /openapi/swagger-ui.css HTTP/1.1 200 141841 - 1.339 ms
[email-57679f8d9b-75j6r email] ::ffff:172.17.0.2 - GET /openapi/swagger-ui-init.js HTTP/1.1 200 5519 - 0.774 ms
[email-57679f8d9b-75j6r email] ::ffff:172.17.0.2 - GET /openapi/swagger-ui-standalone-preset.js HTTP/1.1 200 307009 - 17.737 ms
[auth-7b56b5dc98-jlzzz auth] ::ffff:172.17.0.2 - GET /openapi/swagger-ui-bundle.js HTTP/1.1 200 984506 - 1.126 ms
[auth-7b56b5dc98-jlzzz auth] ::ffff:172.17.0.2 - GET /openapi/favicon-32x32.png HTTP/1.1 200 628 - 1.453 ms
```

<p>I'm fairly new to kubernetes, so any debugging tips would be awesome as well.</p>

<p>EDIT: Add describe for entry ingress and pods list</p>

<p>Describe Entry for ingress;</p>

```Name:             entry
Namespace:        default
Address:          192.168.39.189
Default backend:  default-http-backend:80 (<error: endpoints "default-http-backend" not found>)
Rules:
  Host                  Path  Backends
  ----                  ----  --------
  api.dev.tengable.com
                        /openapi   auth:http (172.17.0.8:8080)
Annotations:            Events:
  Type                  Reason  Age                    From                      Message
  ----                  ------  ----                   ----                      -------
  Normal                CREATE  8m33s                  nginx-ingress-controller  Ingress default/entry
  Normal                UPDATE  7m50s (x2 over 8m28s)  nginx-ingress-controller  Ingress default/entry

```

<p>Pods: </p>

```NAME                        READY   STATUS    RESTARTS   AGE     IP            NODE       NOMINATED NODE   READINESS GATES
auth-759b6cd8f8-2pvzj       1/1     Running   5          3m33s   172.17.0.7    minikube   <none>           <none>
email-589cffd945-kql25      1/1     Running   0          2m59s   172.17.0.8    minikube   <none>           <none>
postgres-68c74677b6-8vxg9   1/1     Running   0          2m59s   172.17.0.9    minikube   <none>           <none>
redis-85776b6757-lh9kc      1/1     Running   0          2m53s   172.17.0.10   minikube   <none>           <none>

```

<p>Minikube ingress pod controller log</p>

```172.17.0.1 - - [29/May/2020:19:05:28 +0000] "GET /openapi/ HTTP/1.1" 200 1242 "-" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:76.0) Gecko/20100101 Firefox/76.0" 403 0.047 [default-auth-http] [] 172.17.0.9:8080 3104 0.047 200 6e1bc857061b3758b3f21735d6d65839
172.17.0.1 - - [29/May/2020:19:05:28 +0000] "GET /openapi/swagger-ui.css HTTP/1.1" 200 22708 "http://api.dev.tengable.com:8080/openapi/" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:76.0) Gecko/20100101 Firefox/76.0" 383 0.015 [default-auth-http] [] 172.17.0.7:8080 141841 0.016 200 4719376be00e46842f510ab4eedc8d1c
172.17.0.1 - - [29/May/2020:19:05:28 +0000] "GET /openapi/swagger-ui-init.js HTTP/1.1" 200 1285 "http://api.dev.tengable.com:8080/openapi/" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:76.0) Gecko/20100101 Firefox/76.0" 372 0.043 [default-auth-http] [] 172.17.0.7:8080 5519 0.043 200 109e5ed08dd54e78dcdaed526973dfde
172.17.0.1 - - [29/May/2020:19:05:28 +0000] "GET /openapi/swagger-ui-standalone-preset.js HTTP/1.1" 200 99126 "http://api.dev.tengable.com:8080/openapi/" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:76.0) Gecko/20100101 Firefox/76.0" 385 0.080 [default-auth-http] [] 172.17.0.9:8080 307009 0.080 200 a4e85558a69082ac5bec3dfe4f5c1300
172.17.0.1 - - [29/May/2020:19:05:28 +0000] "GET /openapi/swagger-ui-bundle.js HTTP/1.1" 200 310454 "http://api.dev.tengable.com:8080/openapi/" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:76.0) Gecko/20100101 Firefox/76.0" 374 0.123 [default-auth-http] [] 172.17.0.9:8080 984506 0.123 200 bf5e3fb008ccf54f40de1923e0df56b7
172.17.0.1 - - [29/May/2020:19:05:29 +0000] "GET /openapi/favicon-32x32.png HTTP/1.1" 200 628 "-" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:76.0) Gecko/20100101 Firefox/76.0" 330 0.003 [default-auth-http] [] 172.17.0.9:8080 628 0.004 200 1db7d7acc4699409a4b7bf0c2060ae2e
```

<p>Edit 2:
I ran <code>k exec -it -n kube-system ingress-nginx-controller-7bb4c67d67-cnnlz cat /etc/nginx/nginx.conf</code> and got the generated nginx.conf as well</p>

```
# Configuration checksum: 11102474080819284102

# setup custom paths that do not require root access
pid /tmp/nginx.pid;

daemon off;

worker_processes 2;

worker_rlimit_nofile 523264;

worker_shutdown_timeout 240s ;

events {
    multi_accept        on;
    worker_connections  16384;
    use                 epoll;
}

http {
    lua_package_path "/etc/nginx/lua/?.lua;;";

    lua_shared_dict balancer_ewma 10M;
    lua_shared_dict balancer_ewma_last_touched_at 10M;
    lua_shared_dict balancer_ewma_locks 1M;
    lua_shared_dict certificate_data 20M;
    lua_shared_dict certificate_servers 5M;
    lua_shared_dict configuration_data 20M;
    lua_shared_dict ocsp_response_cache 5M;

    init_by_lua_block {
        collectgarbage("collect")

        -- init modules
        local ok, res

        ok, res = pcall(require, "lua_ingress")
        if not ok then
        error("require failed: " .. tostring(res))
        else
        lua_ingress = res
        lua_ingress.set_config({
            use_forwarded_headers = false,
            use_proxy_protocol = false,
            is_ssl_passthrough_enabled = false,
            http_redirect_code = 308,
        listen_ports = { ssl_proxy = "442", https = "443" },

            hsts = false,
            hsts_max_age = 15724800,
            hsts_include_subdomains = true,
            hsts_preload = false,
        })
        end

        ok, res = pcall(require, "configuration")
        if not ok then
        error("require failed: " .. tostring(res))
        else
        configuration = res
        end

        ok, res = pcall(require, "balancer")
        if not ok then
        error("require failed: " .. tostring(res))
        else
        balancer = res
        end

        ok, res = pcall(require, "monitor")
        if not ok then
        error("require failed: " .. tostring(res))
        else
        monitor = res
        end

        ok, res = pcall(require, "certificate")
        if not ok then
        error("require failed: " .. tostring(res))
        else
        certificate = res
        certificate.is_ocsp_stapling_enabled = false
        end

        ok, res = pcall(require, "plugins")
        if not ok then
        error("require failed: " .. tostring(res))
        else
        plugins = res
        end
        -- load all plugins that'll be used here
    plugins.init({  })
    }

    init_worker_by_lua_block {
        lua_ingress.init_worker()
        balancer.init_worker()

        monitor.init_worker()

        plugins.run()
    }

    geoip_country       /etc/nginx/geoip/GeoIP.dat;
    geoip_city          /etc/nginx/geoip/GeoLiteCity.dat;
    geoip_org           /etc/nginx/geoip/GeoIPASNum.dat;
    geoip_proxy_recursive on;

    aio                 threads;
    aio_write           on;

    tcp_nopush          on;
    tcp_nodelay         on;

    log_subrequest      on;

    reset_timedout_connection on;

    keepalive_timeout  75s;
    keepalive_requests 100;

    client_body_temp_path           /tmp/client-body;
    fastcgi_temp_path               /tmp/fastcgi-temp;
    proxy_temp_path                 /tmp/proxy-temp;
    ajp_temp_path                   /tmp/ajp-temp;

    client_header_buffer_size       1k;
    client_header_timeout           60s;
    large_client_header_buffers     4 8k;
    client_body_buffer_size         8k;
    client_body_timeout             60s;

    http2_max_field_size            4k;
    http2_max_header_size           16k;
    http2_max_requests              1000;
    http2_max_concurrent_streams    128;

    types_hash_max_size             2048;
    server_names_hash_max_size      1024;
    server_names_hash_bucket_size   64;
    map_hash_bucket_size            64;

    proxy_headers_hash_max_size     512;
    proxy_headers_hash_bucket_size  64;

    variables_hash_bucket_size      256;
    variables_hash_max_size         2048;

    underscores_in_headers          off;
    ignore_invalid_headers          on;

    limit_req_status                503;
    limit_conn_status               503;

    include /etc/nginx/mime.types;
    default_type text/html;

    gzip on;
    gzip_comp_level 5;
    gzip_http_version 1.1;
    gzip_min_length 256;
    gzip_types application/atom+xml application/javascript application/x-javascript application/json application/rss+xml application/vnd.ms-fontobject application/x-font-ttf application/x-web-app-manifest+json application/xhtml+xml application/xml font/opentype image/svg+xml image/x-icon text/css text/javascript text/plain text/x-component;
    gzip_proxied any;
    gzip_vary on;

    # Custom headers for response

    server_tokens on;

    # disable warnings
    uninitialized_variable_warn off;

    # Additional available variables:
    # $namespace
    # $ingress_name
    # $service_name
    # $service_port
    log_format upstreaminfo '$remote_addr - $remote_user [$time_local] "$request" $status $body_bytes_sent "$http_referer" "$http_user_agent" $request_length $request_time [$proxy_upstream_name] [$proxy_alternative_upstream_name] $upstream_addr $upstream_response_length $upstream_response_time $upstream_status $req_id';

    map $request_uri $loggable {

        default 1;
    }

    access_log /var/log/nginx/access.log upstreaminfo  if=$loggable;

    error_log  /var/log/nginx/error.log notice;

    resolver 10.96.0.10 valid=30s ipv6=off;

    # See https://www.nginx.com/blog/websocket-nginx
    map $http_upgrade $connection_upgrade {
        default          upgrade;

        # See http://nginx.org/en/docs/http/ngx_http_upstream_module.html#keepalive
        ''               '';

    }

    # Reverse proxies can detect if a client provides a X-Request-ID header, and pass it on to the backend server.
    # If no such header is provided, it can provide a random value.
    map $http_x_request_id $req_id {
        default   $http_x_request_id;

        ""        $request_id;

    }

    # Create a variable that contains the literal $ character.
    # This works because the geo module will not resolve variables.
    geo $literal_dollar {
        default "$";
    }

    server_name_in_redirect off;
    port_in_redirect        off;

    ssl_protocols TLSv1.2;

    ssl_early_data off;

    # turn on session caching to drastically improve performance

    ssl_session_cache builtin:1000 shared:SSL:10m;
    ssl_session_timeout 10m;

    # allow configuring ssl session tickets
    ssl_session_tickets on;

    # slightly reduce the time-to-first-byte
    ssl_buffer_size 4k;

    # allow configuring custom ssl ciphers
    ssl_ciphers 'ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384';
    ssl_prefer_server_ciphers on;

    ssl_ecdh_curve auto;

    # PEM sha: db0c5d7bbddcf6bfa82f6a621647e21c5e3bc1bd
    ssl_certificate     /etc/ingress-controller/ssl/default-fake-certificate.pem;
    ssl_certificate_key /etc/ingress-controller/ssl/default-fake-certificate.pem;

    proxy_ssl_session_reuse on;

    upstream upstream_balancer {
        ### Attention!!!
        #
        # We no longer create "upstream" section for every backend.
        # Backends are handled dynamically using Lua. If you would like to debug
        # and see what backends ingress-nginx has in its memory you can
        # install our kubectl plugin https://kubernetes.github.io/ingress-nginx/kubectl-plugin.
        # Once you have the plugin you can use "kubectl ingress-nginx backends" command to
        # inspect current backends.
        #
        ###

        server 0.0.0.1; # placeholder

        balancer_by_lua_block {
            balancer.balance()
        }

        keepalive 32;

        keepalive_timeout  60s;
        keepalive_requests 100;

    }

    # Cache for internal auth checks
    proxy_cache_path /tmp/nginx-cache-auth levels=1:2 keys_zone=auth_cache:10m max_size=128m inactive=30m use_temp_path=off;

    # Global filters

    ## start server _
    server {
        server_name _ ;

        listen 80 default_server reuseport backlog=511 ;
        listen 443 default_server reuseport backlog=511 ssl http2 ;

        set $proxy_upstream_name "-";

        ssl_certificate_by_lua_block {
            certificate.call()
        }

        location / {

            set $namespace      "";
            set $ingress_name   "";
            set $service_name   "";
            set $service_port   "";
            set $location_path  "/";

            rewrite_by_lua_block {
                lua_ingress.rewrite({
                    force_ssl_redirect = false,
                    ssl_redirect = false,
                    force_no_ssl_redirect = false,
                    use_port_in_redirects = false,
                })
                balancer.rewrite()
                plugins.run()
            }

            # be careful with `access_by_lua_block` and `satisfy any` directives as satisfy any
            # will always succeed when there's `access_by_lua_block` that does not have any lua code doing `ngx.exit(ngx.DECLINED)`
            # other authentication method such as basic auth or external auth useless - all requests will be allowed.
            #access_by_lua_block {
            #}

            header_filter_by_lua_block {
                lua_ingress.header()
                plugins.run()
            }

            body_filter_by_lua_block {
            }

            log_by_lua_block {
                balancer.log()

                monitor.call()

                plugins.run()
            }

            access_log off;

            port_in_redirect off;

            set $balancer_ewma_score -1;
            set $proxy_upstream_name "upstream-default-backend";
            set $proxy_host          $proxy_upstream_name;
            set $pass_access_scheme  $scheme;

            set $pass_server_port    $server_port;

            set $best_http_host      $http_host;
            set $pass_port           $pass_server_port;

            set $proxy_alternative_upstream_name "";

            client_max_body_size                    1m;

            proxy_set_header Host                   $best_http_host;

            # Pass the extracted client certificate to the backend

            # Allow websocket connections
            proxy_set_header                        Upgrade           $http_upgrade;

            proxy_set_header                        Connection        $connection_upgrade;

            proxy_set_header X-Request-ID           $req_id;
            proxy_set_header X-Real-IP              $remote_addr;

            proxy_set_header X-Forwarded-For        $remote_addr;

            proxy_set_header X-Forwarded-Host       $best_http_host;
            proxy_set_header X-Forwarded-Port       $pass_port;
            proxy_set_header X-Forwarded-Proto      $pass_access_scheme;

            proxy_set_header X-Scheme               $pass_access_scheme;

            # Pass the original X-Forwarded-For
            proxy_set_header X-Original-Forwarded-For $http_x_forwarded_for;

            # mitigate HTTPoxy Vulnerability
            # https://www.nginx.com/blog/mitigating-the-httpoxy-vulnerability-with-nginx/
            proxy_set_header Proxy                  "";

            # Custom headers to proxied server

            proxy_connect_timeout                   5s;
            proxy_send_timeout                      60s;
            proxy_read_timeout                      60s;

            proxy_buffering                         off;
            proxy_buffer_size                       4k;
            proxy_buffers                           4 4k;

            proxy_max_temp_file_size                1024m;

            proxy_request_buffering                 on;
            proxy_http_version                      1.1;

            proxy_cookie_domain                     off;
            proxy_cookie_path                       off;

            # In case of errors try the next upstream server before returning an error
            proxy_next_upstream                     error timeout;
            proxy_next_upstream_timeout             0;
            proxy_next_upstream_tries               3;

            proxy_pass http://upstream_balancer;

            proxy_redirect                          off;

        }

        # health checks in cloud providers require the use of port 80
        location /healthz {

            access_log off;
            return 200;
        }

        # this is required to avoid error if nginx is being monitored
        # with an external software (like sysdig)
        location /nginx_status {

            allow 127.0.0.1;

            deny all;

            access_log off;
            stub_status on;
        }

    }
    ## end server _

    ## start server api.dev.tengable.com
    server {
        server_name api.dev.tengable.com ;

        listen 80  ;
        listen 443  ssl http2 ;

        set $proxy_upstream_name "-";

        ssl_certificate_by_lua_block {
            certificate.call()
        }

        location /openapi {

            set $namespace      "default";
            set $ingress_name   "entry";
            set $service_name   "auth";
            set $service_port   "http";
            set $location_path  "/openapi";

            rewrite_by_lua_block {
                lua_ingress.rewrite({
                    force_ssl_redirect = false,
                    ssl_redirect = true,
                    force_no_ssl_redirect = false,
                    use_port_in_redirects = false,
                })
                balancer.rewrite()
                plugins.run()
            }

            # be careful with `access_by_lua_block` and `satisfy any` directives as satisfy any
            # will always succeed when there's `access_by_lua_block` that does not have any lua code doing `ngx.exit(ngx.DECLINED)`
            # other authentication method such as basic auth or external auth useless - all requests will be allowed.
            #access_by_lua_block {
            #}

            header_filter_by_lua_block {
                lua_ingress.header()
                plugins.run()
            }

            body_filter_by_lua_block {
            }

            log_by_lua_block {
                balancer.log()

                monitor.call()

                plugins.run()
            }

            port_in_redirect off;

            set $balancer_ewma_score -1;
            set $proxy_upstream_name "default-auth-http";
            set $proxy_host          $proxy_upstream_name;
            set $pass_access_scheme  $scheme;

            set $pass_server_port    $server_port;

            set $best_http_host      $http_host;
            set $pass_port           $pass_server_port;

            set $proxy_alternative_upstream_name "";

            client_max_body_size                    1m;

            proxy_set_header Host                   $best_http_host;

            # Pass the extracted client certificate to the backend

            # Allow websocket connections
            proxy_set_header                        Upgrade           $http_upgrade;

            proxy_set_header                        Connection        $connection_upgrade;

            proxy_set_header X-Request-ID           $req_id;
            proxy_set_header X-Real-IP              $remote_addr;

            proxy_set_header X-Forwarded-For        $remote_addr;

            proxy_set_header X-Forwarded-Host       $best_http_host;
            proxy_set_header X-Forwarded-Port       $pass_port;
            proxy_set_header X-Forwarded-Proto      $pass_access_scheme;

            proxy_set_header X-Scheme               $pass_access_scheme;

            # Pass the original X-Forwarded-For
            proxy_set_header X-Original-Forwarded-For $http_x_forwarded_for;

            # mitigate HTTPoxy Vulnerability
            # https://www.nginx.com/blog/mitigating-the-httpoxy-vulnerability-with-nginx/
            proxy_set_header Proxy                  "";

            # Custom headers to proxied server

            proxy_connect_timeout                   5s;
            proxy_send_timeout                      60s;
            proxy_read_timeout                      60s;

            proxy_buffering                         off;
            proxy_buffer_size                       4k;
            proxy_buffers                           4 4k;

            proxy_max_temp_file_size                1024m;

            proxy_request_buffering                 on;
            proxy_http_version                      1.1;

            proxy_cookie_domain                     off;
            proxy_cookie_path                       off;

            # In case of errors try the next upstream server before returning an error
            proxy_next_upstream                     error timeout;
            proxy_next_upstream_timeout             0;
            proxy_next_upstream_tries               3;

            proxy_pass http://upstream_balancer;

            proxy_redirect                          off;

        }

        location / {

            set $namespace      "";
            set $ingress_name   "";
            set $service_name   "";
            set $service_port   "";
            set $location_path  "/";

            rewrite_by_lua_block {
                lua_ingress.rewrite({
                    force_ssl_redirect = false,
                    ssl_redirect = true,
                    force_no_ssl_redirect = false,
                    use_port_in_redirects = false,
                })
                balancer.rewrite()
                plugins.run()
            }

            # be careful with `access_by_lua_block` and `satisfy any` directives as satisfy any
            # will always succeed when there's `access_by_lua_block` that does not have any lua code doing `ngx.exit(ngx.DECLINED)`
            # other authentication method such as basic auth or external auth useless - all requests will be allowed.
            #access_by_lua_block {
            #}

            header_filter_by_lua_block {
                lua_ingress.header()
                plugins.run()
            }

            body_filter_by_lua_block {
            }

            log_by_lua_block {
                balancer.log()

                monitor.call()

                plugins.run()
            }

            port_in_redirect off;

            set $balancer_ewma_score -1;
            set $proxy_upstream_name "upstream-default-backend";
            set $proxy_host          $proxy_upstream_name;
            set $pass_access_scheme  $scheme;

            set $pass_server_port    $server_port;

            set $best_http_host      $http_host;
            set $pass_port           $pass_server_port;

            set $proxy_alternative_upstream_name "";

            client_max_body_size                    1m;

            proxy_set_header Host                   $best_http_host;

            # Pass the extracted client certificate to the backend

            # Allow websocket connections
            proxy_set_header                        Upgrade           $http_upgrade;

            proxy_set_header                        Connection        $connection_upgrade;

            proxy_set_header X-Request-ID           $req_id;
            proxy_set_header X-Real-IP              $remote_addr;

            proxy_set_header X-Forwarded-For        $remote_addr;

            proxy_set_header X-Forwarded-Host       $best_http_host;
            proxy_set_header X-Forwarded-Port       $pass_port;
            proxy_set_header X-Forwarded-Proto      $pass_access_scheme;

            proxy_set_header X-Scheme               $pass_access_scheme;

            # Pass the original X-Forwarded-For
            proxy_set_header X-Original-Forwarded-For $http_x_forwarded_for;

            # mitigate HTTPoxy Vulnerability
            # https://www.nginx.com/blog/mitigating-the-httpoxy-vulnerability-with-nginx/
            proxy_set_header Proxy                  "";

            # Custom headers to proxied server

            proxy_connect_timeout                   5s;
            proxy_send_timeout                      60s;
            proxy_read_timeout                      60s;

            proxy_buffering                         off;
            proxy_buffer_size                       4k;
            proxy_buffers                           4 4k;

            proxy_max_temp_file_size                1024m;

            proxy_request_buffering                 on;
            proxy_http_version                      1.1;

            proxy_cookie_domain                     off;
            proxy_cookie_path                       off;

            # In case of errors try the next upstream server before returning an error
            proxy_next_upstream                     error timeout;
            proxy_next_upstream_timeout             0;
            proxy_next_upstream_tries               3;

            proxy_pass http://upstream_balancer;

            proxy_redirect                          off;

        }

    }
    ## end server api.dev.tengable.com

    # backend for when default-backend-service is not configured or it does not have endpoints
    server {
        listen 8181 default_server reuseport backlog=511;

        set $proxy_upstream_name "internal";

        access_log off;

        location / {
            return 404;
        }
    }

    # default server, used for NGINX healthcheck and access to nginx stats
    server {
        listen 127.0.0.1:10246;
        set $proxy_upstream_name "internal";

        keepalive_timeout 0;
        gzip off;

        access_log off;

        location /healthz {
            return 200;
        }

        location /is-dynamic-lb-initialized {
            content_by_lua_block {
                local configuration = require("configuration")
                local backend_data = configuration.get_backends_data()
                if not backend_data then
                ngx.exit(ngx.HTTP_INTERNAL_SERVER_ERROR)
                return
                end

                ngx.say("OK")
                ngx.exit(ngx.HTTP_OK)
            }
        }

        location /nginx_status {
            stub_status on;
        }

        location /configuration {
            client_max_body_size                    21m;
            client_body_buffer_size                 21m;
            proxy_buffering                         off;

            content_by_lua_block {
                configuration.call()
            }
        }

        location / {
            content_by_lua_block {
                ngx.exit(ngx.HTTP_NOT_FOUND)
            }
        }
    }
}

stream {
    lua_package_path "/etc/nginx/lua/?.lua;/etc/nginx/lua/vendor/?.lua;;";

    lua_shared_dict tcp_udp_configuration_data 5M;

    init_by_lua_block {
        collectgarbage("collect")

        -- init modules
        local ok, res

        ok, res = pcall(require, "configuration")
        if not ok then
        error("require failed: " .. tostring(res))
        else
        configuration = res
        end

        ok, res = pcall(require, "tcp_udp_configuration")
        if not ok then
        error("require failed: " .. tostring(res))
        else
        tcp_udp_configuration = res
        end

        ok, res = pcall(require, "tcp_udp_balancer")
        if not ok then
        error("require failed: " .. tostring(res))
        else
        tcp_udp_balancer = res
        end
    }

    init_worker_by_lua_block {
        tcp_udp_balancer.init_worker()
    }

    lua_add_variable $proxy_upstream_name;

    log_format log_stream '[$remote_addr] [$time_local] $protocol $status $bytes_sent $bytes_received $session_time';

    access_log /var/log/nginx/access.log log_stream ;

    error_log  /var/log/nginx/error.log;

    upstream upstream_balancer {
        server 0.0.0.1:1234; # placeholder

        balancer_by_lua_block {
            tcp_udp_balancer.balance()
        }
    }

    server {
        listen 127.0.0.1:10247;

        access_log off;

        content_by_lua_block {
            tcp_udp_configuration.call()
        }
    }

    # TCP services

    # UDP services

}

```

答:
Github user: aledbf actually figured it out. https://github.com/kubernetes/ingress-nginx/issues/5622

The problem was that kustomize is using

```<code>commonLabel:
  app: something
</code>```

Which is overriding all the selectors I used which were app: auth, app: email etc..

Body:
Update: I reproduced this in its own repo https://github.com/ericwooley/repro-ingress-issue

I'm trying to setup ingress on minikube with the ingress addon.

I have two services, and deployments

service 1 is email:

kind: Service
apiVersion: v1
metadata:
  name: email
  labels:
    app: email
spec:
  selector:
    app:  email
  ports:
  - name:  http
    port:  8081
    targetPort: http
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: email
spec:
  selector:
    matchLabels:
      app: email
  replicas: 1
  template:
    metadata:
      labels:
        app: email
    spec:
      containers:
      - name: email
        image: ericwooley/auth
        ports:
        - name: http
          containerPort: 8080

service 2 is auth

apiVersion: v1
kind: Service
metadata:
  name: auth
  labels:
    app: auth
spec:
  type: ClusterIP
  ports:
    - port: 8080
      targetPort: http
      name: http
      protocol: TCP
  selector:
    app: auth
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: auth
spec:
  selector:
    matchLabels:
      app: auth
  replicas: 1
  template:
    metadata:
      labels:
        app: auth
    spec:
      restartPolicy: Always
      containers:
        - name: auth
          image: ericwooley/auth
          imagePullPolicy: Never
          ports:
            - name: http
              containerPort: 8080

and my ingress

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: entry
spec:
  rules:
  - host: api.tengable.com
    http:
      paths:
      - path: /openapi
        pathType: Prefix
        backend:
          serviceName: auth
          servicePort: http

navigating too /openapi sends requests to both services. I can't figure out why it's not all going to the auth service

logs from services:

[auth-7b56b5dc98-jlzzz auth] ::ffff:172.17.0.2 - GET /openapi/ HTTP/1.1 200 3104 - 29.375 ms
[email-57679f8d9b-75j6r email] ::ffff:172.17.0.2 - GET /openapi/swagger-ui.css HTTP/1.1 200 141841 - 1.339 ms
[email-57679f8d9b-75j6r email] ::ffff:172.17.0.2 - GET /openapi/swagger-ui-init.js HTTP/1.1 200 5519 - 0.774 ms
[email-57679f8d9b-75j6r email] ::ffff:172.17.0.2 - GET /openapi/swagger-ui-standalone-preset.js HTTP/1.1 200 307009 - 17.737 ms
[auth-7b56b5dc98-jlzzz auth] ::ffff:172.17.0.2 - GET /openapi/swagger-ui-bundle.js HTTP/1.1 200 984506 - 1.126 ms
[auth-7b56b5dc98-jlzzz auth] ::ffff:172.17.0.2 - GET /openapi/favicon-32x32.png HTTP/1.1 200 628 - 1.453 ms

I'm fairly new to kubernetes, so any debugging tips would be awesome as well.

EDIT: Add describe for entry ingress and pods list

Describe Entry for ingress;

Name:             entry
Namespace:        default
Address:          192.168.39.189
Default backend:  default-http-backend:80 (<error: endpoints "default-http-backend" not found>)
Rules:
  Host                  Path  Backends
  ----                  ----  --------
  api.dev.tengable.com
                        /openapi   auth:http (172.17.0.8:8080)
Annotations:            Events:
  Type                  Reason  Age                    From                      Message
  ----                  ------  ----                   ----                      -------
  Normal                CREATE  8m33s                  nginx-ingress-controller  Ingress default/entry
  Normal                UPDATE  7m50s (x2 over 8m28s)  nginx-ingress-controller  Ingress default/entry

Pods:

NAME                        READY   STATUS    RESTARTS   AGE     IP            NODE       NOMINATED NODE   READINESS GATES
auth-759b6cd8f8-2pvzj       1/1     Running   5          3m33s   172.17.0.7    minikube   <none>           <none>
email-589cffd945-kql25      1/1     Running   0          2m59s   172.17.0.8    minikube   <none>           <none>
postgres-68c74677b6-8vxg9   1/1     Running   0          2m59s   172.17.0.9    minikube   <none>           <none>
redis-85776b6757-lh9kc      1/1     Running   0          2m53s   172.17.0.10   minikube   <none>           <none>

Minikube ingress pod controller log

172.17.0.1 - - [29/May/2020:19:05:28 +0000] "GET /openapi/ HTTP/1.1" 200 1242 "-" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:76.0) Gecko/20100101 Firefox/76.0" 403 0.047 [default-auth-http] [] 172.17.0.9:8080 3104 0.047 200 6e1bc857061b3758b3f21735d6d65839
172.17.0.1 - - [29/May/2020:19:05:28 +0000] "GET /openapi/swagger-ui.css HTTP/1.1" 200 22708 "http://api.dev.tengable.com:8080/openapi/" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:76.0) Gecko/20100101 Firefox/76.0" 383 0.015 [default-auth-http] [] 172.17.0.7:8080 141841 0.016 200 4719376be00e46842f510ab4eedc8d1c
172.17.0.1 - - [29/May/2020:19:05:28 +0000] "GET /openapi/swagger-ui-init.js HTTP/1.1" 200 1285 "http://api.dev.tengable.com:8080/openapi/" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:76.0) Gecko/20100101 Firefox/76.0" 372 0.043 [default-auth-http] [] 172.17.0.7:8080 5519 0.043 200 109e5ed08dd54e78dcdaed526973dfde
172.17.0.1 - - [29/May/2020:19:05:28 +0000] "GET /openapi/swagger-ui-standalone-preset.js HTTP/1.1" 200 99126 "http://api.dev.tengable.com:8080/openapi/" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:76.0) Gecko/20100101 Firefox/76.0" 385 0.080 [default-auth-http] [] 172.17.0.9:8080 307009 0.080 200 a4e85558a69082ac5bec3dfe4f5c1300
172.17.0.1 - - [29/May/2020:19:05:28 +0000] "GET /openapi/swagger-ui-bundle.js HTTP/1.1" 200 310454 "http://api.dev.tengable.com:8080/openapi/" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:76.0) Gecko/20100101 Firefox/76.0" 374 0.123 [default-auth-http] [] 172.17.0.9:8080 984506 0.123 200 bf5e3fb008ccf54f40de1923e0df56b7
172.17.0.1 - - [29/May/2020:19:05:29 +0000] "GET /openapi/favicon-32x32.png HTTP/1.1" 200 628 "-" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:76.0) Gecko/20100101 Firefox/76.0" 330 0.003 [default-auth-http] [] 172.17.0.9:8080 628 0.004 200 1db7d7acc4699409a4b7bf0c2060ae2e

Edit 2:
I ran k exec -it -n kube-system ingress-nginx-controller-7bb4c67d67-cnnlz cat /etc/nginx/nginx.conf and got the generated nginx.conf as well

# Configuration checksum: 11102474080819284102

# setup custom paths that do not require root access
pid /tmp/nginx.pid;

daemon off;

worker_processes 2;

worker_rlimit_nofile 523264;

worker_shutdown_timeout 240s ;

events {
    multi_accept        on;
    worker_connections  16384;
    use                 epoll;
}

http {
    lua_package_path "/etc/nginx/lua/?.lua;;";

    lua_shared_dict balancer_ewma 10M;
    lua_shared_dict balancer_ewma_last_touched_at 10M;
    lua_shared_dict balancer_ewma_locks 1M;
    lua_shared_dict certificate_data 20M;
    lua_shared_dict certificate_servers 5M;
    lua_shared_dict configuration_data 20M;
    lua_shared_dict ocsp_response_cache 5M;

    init_by_lua_block {
        collectgarbage("collect")

        -- init modules
        local ok, res

        ok, res = pcall(require, "lua_ingress")
        if not ok then
        error("require failed: " .. tostring(res))
        else
        lua_ingress = res
        lua_ingress.set_config({
            use_forwarded_headers = false,
            use_proxy_protocol = false,
            is_ssl_passthrough_enabled = false,
            http_redirect_code = 308,
        listen_ports = { ssl_proxy = "442", https = "443" },

            hsts = false,
            hsts_max_age = 15724800,
            hsts_include_subdomains = true,
            hsts_preload = false,
        })
        end

        ok, res = pcall(require, "configuration")
        if not ok then
        error("require failed: " .. tostring(res))
        else
        configuration = res
        end

        ok, res = pcall(require, "balancer")
        if not ok then
        error("require failed: " .. tostring(res))
        else
        balancer = res
        end

        ok, res = pcall(require, "monitor")
        if not ok then
        error("require failed: " .. tostring(res))
        else
        monitor = res
        end

        ok, res = pcall(require, "certificate")
        if not ok then
        error("require failed: " .. tostring(res))
        else
        certificate = res
        certificate.is_ocsp_stapling_enabled = false
        end

        ok, res = pcall(require, "plugins")
        if not ok then
        error("require failed: " .. tostring(res))
        else
        plugins = res
        end
        -- load all plugins that'll be used here
    plugins.init({  })
    }

    init_worker_by_lua_block {
        lua_ingress.init_worker()
        balancer.init_worker()

        monitor.init_worker()

        plugins.run()
    }

    geoip_country       /etc/nginx/geoip/GeoIP.dat;
    geoip_city          /etc/nginx/geoip/GeoLiteCity.dat;
    geoip_org           /etc/nginx/geoip/GeoIPASNum.dat;
    geoip_proxy_recursive on;

    aio                 threads;
    aio_write           on;

    tcp_nopush          on;
    tcp_nodelay         on;

    log_subrequest      on;

    reset_timedout_connection on;

    keepalive_timeout  75s;
    keepalive_requests 100;

    client_body_temp_path           /tmp/client-body;
    fastcgi_temp_path               /tmp/fastcgi-temp;
    proxy_temp_path                 /tmp/proxy-temp;
    ajp_temp_path                   /tmp/ajp-temp;

    client_header_buffer_size       1k;
    client_header_timeout           60s;
    large_client_header_buffers     4 8k;
    client_body_buffer_size         8k;
    client_body_timeout             60s;

    http2_max_field_size            4k;
    http2_max_header_size           16k;
    http2_max_requests              1000;
    http2_max_concurrent_streams    128;

    types_hash_max_size             2048;
    server_names_hash_max_size      1024;
    server_names_hash_bucket_size   64;
    map_hash_bucket_size            64;

    proxy_headers_hash_max_size     512;
    proxy_headers_hash_bucket_size  64;

    variables_hash_bucket_size      256;
    variables_hash_max_size         2048;

    underscores_in_headers          off;
    ignore_invalid_headers          on;

    limit_req_status                503;
    limit_conn_status               503;

    include /etc/nginx/mime.types;
    default_type text/html;

    gzip on;
    gzip_comp_level 5;
    gzip_http_version 1.1;
    gzip_min_length 256;
    gzip_types application/atom+xml application/javascript application/x-javascript application/json application/rss+xml application/vnd.ms-fontobject application/x-font-ttf application/x-web-app-manifest+json application/xhtml+xml application/xml font/opentype image/svg+xml image/x-icon text/css text/javascript text/plain text/x-component;
    gzip_proxied any;
    gzip_vary on;

    # Custom headers for response

    server_tokens on;

    # disable warnings
    uninitialized_variable_warn off;

    # Additional available variables:
    # $namespace
    # $ingress_name
    # $service_name
    # $service_port
    log_format upstreaminfo '$remote_addr - $remote_user [$time_local] "$request" $status $body_bytes_sent "$http_referer" "$http_user_agent" $request_length $request_time [$proxy_upstream_name] [$proxy_alternative_upstream_name] $upstream_addr $upstream_response_length $upstream_response_time $upstream_status $req_id';

    map $request_uri $loggable {

        default 1;
    }

    access_log /var/log/nginx/access.log upstreaminfo  if=$loggable;

    error_log  /var/log/nginx/error.log notice;

    resolver 10.96.0.10 valid=30s ipv6=off;

    # See https://www.nginx.com/blog/websocket-nginx
    map $http_upgrade $connection_upgrade {
        default          upgrade;

        # See http://nginx.org/en/docs/http/ngx_http_upstream_module.html#keepalive
        ''               '';

    }

    # Reverse proxies can detect if a client provides a X-Request-ID header, and pass it on to the backend server.
    # If no such header is provided, it can provide a random value.
    map $http_x_request_id $req_id {
        default   $http_x_request_id;

        ""        $request_id;

    }

    # Create a variable that contains the literal $ character.
    # This works because the geo module will not resolve variables.
    geo $literal_dollar {
        default "$";
    }

    server_name_in_redirect off;
    port_in_redirect        off;

    ssl_protocols TLSv1.2;

    ssl_early_data off;

    # turn on session caching to drastically improve performance

    ssl_session_cache builtin:1000 shared:SSL:10m;
    ssl_session_timeout 10m;

    # allow configuring ssl session tickets
    ssl_session_tickets on;

    # slightly reduce the time-to-first-byte
    ssl_buffer_size 4k;

    # allow configuring custom ssl ciphers
    ssl_ciphers 'ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384';
    ssl_prefer_server_ciphers on;

    ssl_ecdh_curve auto;

    # PEM sha: db0c5d7bbddcf6bfa82f6a621647e21c5e3bc1bd
    ssl_certificate     /etc/ingress-controller/ssl/default-fake-certificate.pem;
    ssl_certificate_key /etc/ingress-controller/ssl/default-fake-certificate.pem;

    proxy_ssl_session_reuse on;

    upstream upstream_balancer {
        ### Attention!!!
        #
        # We no longer create "upstream" section for every backend.
        # Backends are handled dynamically using Lua. If you would like to debug
        # and see what backends ingress-nginx has in its memory you can
        # install our kubectl plugin https://kubernetes.github.io/ingress-nginx/kubectl-plugin.
        # Once you have the plugin you can use "kubectl ingress-nginx backends" command to
        # inspect current backends.
        #
        ###

        server 0.0.0.1; # placeholder

        balancer_by_lua_block {
            balancer.balance()
        }

        keepalive 32;

        keepalive_timeout  60s;
        keepalive_requests 100;

    }

    # Cache for internal auth checks
    proxy_cache_path /tmp/nginx-cache-auth levels=1:2 keys_zone=auth_cache:10m max_size=128m inactive=30m use_temp_path=off;

    # Global filters

    ## start server _
    server {
        server_name _ ;

        listen 80 default_server reuseport backlog=511 ;
        listen 443 default_server reuseport backlog=511 ssl http2 ;

        set $proxy_upstream_name "-";

        ssl_certificate_by_lua_block {
            certificate.call()
        }

        location / {

            set $namespace      "";
            set $ingress_name   "";
            set $service_name   "";
            set $service_port   "";
            set $location_path  "/";

            rewrite_by_lua_block {
                lua_ingress.rewrite({
                    force_ssl_redirect = false,
                    ssl_redirect = false,
                    force_no_ssl_redirect = false,
                    use_port_in_redirects = false,
                })
                balancer.rewrite()
                plugins.run()
            }

            # be careful with `access_by_lua_block` and `satisfy any` directives as satisfy any
            # will always succeed when there's `access_by_lua_block` that does not have any lua code doing `ngx.exit(ngx.DECLINED)`
            # other authentication method such as basic auth or external auth useless - all requests will be allowed.
            #access_by_lua_block {
            #}

            header_filter_by_lua_block {
                lua_ingress.header()
                plugins.run()
            }

            body_filter_by_lua_block {
            }

            log_by_lua_block {
                balancer.log()

                monitor.call()

                plugins.run()
            }

            access_log off;

            port_in_redirect off;

            set $balancer_ewma_score -1;
            set $proxy_upstream_name "upstream-default-backend";
            set $proxy_host          $proxy_upstream_name;
            set $pass_access_scheme  $scheme;

            set $pass_server_port    $server_port;

            set $best_http_host      $http_host;
            set $pass_port           $pass_server_port;

            set $proxy_alternative_upstream_name "";

            client_max_body_size                    1m;

            proxy_set_header Host                   $best_http_host;

            # Pass the extracted client certificate to the backend

            # Allow websocket connections
            proxy_set_header                        Upgrade           $http_upgrade;

            proxy_set_header                        Connection        $connection_upgrade;

            proxy_set_header X-Request-ID           $req_id;
            proxy_set_header X-Real-IP              $remote_addr;

            proxy_set_header X-Forwarded-For        $remote_addr;

            proxy_set_header X-Forwarded-Host       $best_http_host;
            proxy_set_header X-Forwarded-Port       $pass_port;
            proxy_set_header X-Forwarded-Proto      $pass_access_scheme;

            proxy_set_header X-Scheme               $pass_access_scheme;

            # Pass the original X-Forwarded-For
            proxy_set_header X-Original-Forwarded-For $http_x_forwarded_for;

            # mitigate HTTPoxy Vulnerability
            # https://www.nginx.com/blog/mitigating-the-httpoxy-vulnerability-with-nginx/
            proxy_set_header Proxy                  "";

            # Custom headers to proxied server

            proxy_connect_timeout                   5s;
            proxy_send_timeout                      60s;
            proxy_read_timeout                      60s;

            proxy_buffering                         off;
            proxy_buffer_size                       4k;
            proxy_buffers                           4 4k;

            proxy_max_temp_file_size                1024m;

            proxy_request_buffering                 on;
            proxy_http_version                      1.1;

            proxy_cookie_domain                     off;
            proxy_cookie_path                       off;

            # In case of errors try the next upstream server before returning an error
            proxy_next_upstream                     error timeout;
            proxy_next_upstream_timeout             0;
            proxy_next_upstream_tries               3;

            proxy_pass http://upstream_balancer;

            proxy_redirect                          off;

        }

        # health checks in cloud providers require the use of port 80
        location /healthz {

            access_log off;
            return 200;
        }

        # this is required to avoid error if nginx is being monitored
        # with an external software (like sysdig)
        location /nginx_status {

            allow 127.0.0.1;

            deny all;

            access_log off;
            stub_status on;
        }

    }
    ## end server _

    ## start server api.dev.tengable.com
    server {
        server_name api.dev.tengable.com ;

        listen 80  ;
        listen 443  ssl http2 ;

        set $proxy_upstream_name "-";

        ssl_certificate_by_lua_block {
            certificate.call()
        }

        location /openapi {

            set $namespace      "default";
            set $ingress_name   "entry";
            set $service_name   "auth";
            set $service_port   "http";
            set $location_path  "/openapi";

            rewrite_by_lua_block {
                lua_ingress.rewrite({
                    force_ssl_redirect = false,
                    ssl_redirect = true,
                    force_no_ssl_redirect = false,
                    use_port_in_redirects = false,
                })
                balancer.rewrite()
                plugins.run()
            }

            # be careful with `access_by_lua_block` and `satisfy any` directives as satisfy any
            # will always succeed when there's `access_by_lua_block` that does not have any lua code doing `ngx.exit(ngx.DECLINED)`
            # other authentication method such as basic auth or external auth useless - all requests will be allowed.
            #access_by_lua_block {
            #}

            header_filter_by_lua_block {
                lua_ingress.header()
                plugins.run()
            }

            body_filter_by_lua_block {
            }

            log_by_lua_block {
                balancer.log()

                monitor.call()

                plugins.run()
            }

            port_in_redirect off;

            set $balancer_ewma_score -1;
            set $proxy_upstream_name "default-auth-http";
            set $proxy_host          $proxy_upstream_name;
            set $pass_access_scheme  $scheme;

            set $pass_server_port    $server_port;

            set $best_http_host      $http_host;
            set $pass_port           $pass_server_port;

            set $proxy_alternative_upstream_name "";

            client_max_body_size                    1m;

            proxy_set_header Host                   $best_http_host;

            # Pass the extracted client certificate to the backend

            # Allow websocket connections
            proxy_set_header                        Upgrade           $http_upgrade;

            proxy_set_header                        Connection        $connection_upgrade;

            proxy_set_header X-Request-ID           $req_id;
            proxy_set_header X-Real-IP              $remote_addr;

            proxy_set_header X-Forwarded-For        $remote_addr;

            proxy_set_header X-Forwarded-Host       $best_http_host;
            proxy_set_header X-Forwarded-Port       $pass_port;
            proxy_set_header X-Forwarded-Proto      $pass_access_scheme;

            proxy_set_header X-Scheme               $pass_access_scheme;

            # Pass the original X-Forwarded-For
            proxy_set_header X-Original-Forwarded-For $http_x_forwarded_for;

            # mitigate HTTPoxy Vulnerability
            # https://www.nginx.com/blog/mitigating-the-httpoxy-vulnerability-with-nginx/
            proxy_set_header Proxy                  "";

            # Custom headers to proxied server

            proxy_connect_timeout                   5s;
            proxy_send_timeout                      60s;
            proxy_read_timeout                      60s;

            proxy_buffering                         off;
            proxy_buffer_size                       4k;
            proxy_buffers                           4 4k;

            proxy_max_temp_file_size                1024m;

            proxy_request_buffering                 on;
            proxy_http_version                      1.1;

            proxy_cookie_domain                     off;
            proxy_cookie_path                       off;

            # In case of errors try the next upstream server before returning an error
            proxy_next_upstream                     error timeout;
            proxy_next_upstream_timeout             0;
            proxy_next_upstream_tries               3;

            proxy_pass http://upstream_balancer;

            proxy_redirect                          off;

        }

        location / {

            set $namespace      "";
            set $ingress_name   "";
            set $service_name   "";
            set $service_port   "";
            set $location_path  "/";

            rewrite_by_lua_block {
                lua_ingress.rewrite({
                    force_ssl_redirect = false,
                    ssl_redirect = true,
                    force_no_ssl_redirect = false,
                    use_port_in_redirects = false,
                })
                balancer.rewrite()
                plugins.run()
            }

            # be careful with `access_by_lua_block` and `satisfy any` directives as satisfy any
            # will always succeed when there's `access_by_lua_block` that does not have any lua code doing `ngx.exit(ngx.DECLINED)`
            # other authentication method such as basic auth or external auth useless - all requests will be allowed.
            #access_by_lua_block {
            #}

            header_filter_by_lua_block {
                lua_ingress.header()
                plugins.run()
            }

            body_filter_by_lua_block {
            }

            log_by_lua_block {
                balancer.log()

                monitor.call()

                plugins.run()
            }

            port_in_redirect off;

            set $balancer_ewma_score -1;
            set $proxy_upstream_name "upstream-default-backend";
            set $proxy_host          $proxy_upstream_name;
            set $pass_access_scheme  $scheme;

            set $pass_server_port    $server_port;

            set $best_http_host      $http_host;
            set $pass_port           $pass_server_port;

            set $proxy_alternative_upstream_name "";

            client_max_body_size                    1m;

            proxy_set_header Host                   $best_http_host;

            # Pass the extracted client certificate to the backend

            # Allow websocket connections
            proxy_set_header                        Upgrade           $http_upgrade;

            proxy_set_header                        Connection        $connection_upgrade;

            proxy_set_header X-Request-ID           $req_id;
            proxy_set_header X-Real-IP              $remote_addr;

            proxy_set_header X-Forwarded-For        $remote_addr;

            proxy_set_header X-Forwarded-Host       $best_http_host;
            proxy_set_header X-Forwarded-Port       $pass_port;
            proxy_set_header X-Forwarded-Proto      $pass_access_scheme;

            proxy_set_header X-Scheme               $pass_access_scheme;

            # Pass the original X-Forwarded-For
            proxy_set_header X-Original-Forwarded-For $http_x_forwarded_for;

            # mitigate HTTPoxy Vulnerability
            # https://www.nginx.com/blog/mitigating-the-httpoxy-vulnerability-with-nginx/
            proxy_set_header Proxy                  "";

            # Custom headers to proxied server

            proxy_connect_timeout                   5s;
            proxy_send_timeout                      60s;
            proxy_read_timeout                      60s;

            proxy_buffering                         off;
            proxy_buffer_size                       4k;
            proxy_buffers                           4 4k;

            proxy_max_temp_file_size                1024m;

            proxy_request_buffering                 on;
            proxy_http_version                      1.1;

            proxy_cookie_domain                     off;
            proxy_cookie_path                       off;

            # In case of errors try the next upstream server before returning an error
            proxy_next_upstream                     error timeout;
            proxy_next_upstream_timeout             0;
            proxy_next_upstream_tries               3;

            proxy_pass http://upstream_balancer;

            proxy_redirect                          off;

        }

    }
    ## end server api.dev.tengable.com

    # backend for when default-backend-service is not configured or it does not have endpoints
    server {
        listen 8181 default_server reuseport backlog=511;

        set $proxy_upstream_name "internal";

        access_log off;

        location / {
            return 404;
        }
    }

    # default server, used for NGINX healthcheck and access to nginx stats
    server {
        listen 127.0.0.1:10246;
        set $proxy_upstream_name "internal";

        keepalive_timeout 0;
        gzip off;

        access_log off;

        location /healthz {
            return 200;
        }

        location /is-dynamic-lb-initialized {
            content_by_lua_block {
                local configuration = require("configuration")
                local backend_data = configuration.get_backends_data()
                if not backend_data then
                ngx.exit(ngx.HTTP_INTERNAL_SERVER_ERROR)
                return
                end

                ngx.say("OK")
                ngx.exit(ngx.HTTP_OK)
            }
        }

        location /nginx_status {
            stub_status on;
        }

        location /configuration {
            client_max_body_size                    21m;
            client_body_buffer_size                 21m;
            proxy_buffering                         off;

            content_by_lua_block {
                configuration.call()
            }
        }

        location / {
            content_by_lua_block {
                ngx.exit(ngx.HTTP_NOT_FOUND)
            }
        }
    }
}

stream {
    lua_package_path "/etc/nginx/lua/?.lua;/etc/nginx/lua/vendor/?.lua;;";

    lua_shared_dict tcp_udp_configuration_data 5M;

    init_by_lua_block {
        collectgarbage("collect")

        -- init modules
        local ok, res

        ok, res = pcall(require, "configuration")
        if not ok then
        error("require failed: " .. tostring(res))
        else
        configuration = res
        end

        ok, res = pcall(require, "tcp_udp_configuration")
        if not ok then
        error("require failed: " .. tostring(res))
        else
        tcp_udp_configuration = res
        end

        ok, res = pcall(require, "tcp_udp_balancer")
        if not ok then
        error("require failed: " .. tostring(res))
        else
        tcp_udp_balancer = res
        end
    }

    init_worker_by_lua_block {
        tcp_udp_balancer.init_worker()
    }

    lua_add_variable $proxy_upstream_name;

    log_format log_stream '[$remote_addr] [$time_local] $protocol $status $bytes_sent $bytes_received $session_time';

    access_log /var/log/nginx/access.log log_stream ;

    error_log  /var/log/nginx/error.log;

    upstream upstream_balancer {
        server 0.0.0.1:1234; # placeholder

        balancer_by_lua_block {
            tcp_udp_balancer.balance()
        }
    }

    server {
        listen 127.0.0.1:10247;

        access_log off;

        content_by_lua_block {
            tcp_udp_configuration.call()
        }
    }

    # TCP services

    # UDP services

}

Body:
Github user: aledbf actually figured it out. https://github.com/kubernetes/ingress-nginx/issues/5622

The problem was that kustomize is using

commonLabel:
  app: something

Which is overriding all the selectors I used which were app: auth, app: email etc..


问:
HTML Hamburger - how to form proper X
I'm trying to build an animated hamburger using css. To do so I use three different span and animate on click - nothing special.

But somehow the transform-origin whatsoever is messed up, hence I can't form a proper X. How can I do so?

let active = false;

const handleNav = () => {
  const hamburger = document.querySelector(".hamburger");
  if (!active) {
    hamburger.classList.add("is-active");
  } else {
    hamburger.classList.remove("is-active");
  }

  active = !active;
}```
<pre class="snippet-code-css lang-css prettyprint-override"><code>.hamburger {
  width: 25px;
  cursor: pointer;
}

span {
    display: block;
    width: 100%;
    height: 2px;
    background-color: black;
    margin-bottom: 4px;
    transform-origin: 0 50%;
    transition: all 0.3s;
}

span:last-child {
  margin-bottom: 0;
}

.is-active span:first-child {
  transform: rotate(45deg);
}

.is-active span:nth-child(2) {
  width: 0;
}

.is-active span:last-child {
  transform: rotate(-45deg);
}</code>```

```

答:
If you can make minor changes in design then change height and margin-bottom of span.

```<code>span{
    height: 3px;
    margin-bottom: 6px;
}
</code>```

or slightly translate first and last bar:

```<code>.is-active span:first-child {
  transform: rotate(45deg) translate(0,-3px);
}

.is-active span:last-child {
  transform: rotate(-45deg) translate(0,3px);
}
</code>```

Title: HTML Hamburger - how to form proper X

Body:
I'm trying to build an animated hamburger using css. To do so I use three different span and animate on click - nothing special.

But somehow the transform-origin whatsoever is messed up, hence I can't form a proper X. How can I do so?

let active = false;

const handleNav = () => {
  const hamburger = document.querySelector(".hamburger");
  if (!active) {
    hamburger.classList.add("is-active");
  } else {
    hamburger.classList.remove("is-active");
  }

  active = !active;
}

.hamburger {
  width: 25px;
  cursor: pointer;
}

span {
    display: block;
    width: 100%;
    height: 2px;
    background-color: black;
    margin-bottom: 4px;
    transform-origin: 0 50%;
    transition: all 0.3s;
}

span:last-child {
  margin-bottom: 0;
}

.is-active span:first-child {
  transform: rotate(45deg);
}

.is-active span:nth-child(2) {
  width: 0;
}

.is-active span:last-child {
  transform: rotate(-45deg);
}

Body:
If you can make minor changes in design then change height and margin-bottom of span.

span{
    height: 3px;
    margin-bottom: 6px;
}

or slightly translate first and last bar:

.is-active span:first-child {
  transform: rotate(45deg) translate(0,-3px);
}

.is-active span:last-child {
  transform: rotate(-45deg) translate(0,3px);
}


问:
How to order string columns differently
I have a has_many association like this:

```<code>has_many  :respostas_matriz_alternativas, :class_name => 'RespostaMatrizAlternativa',
          :order => 'respostas_matriz.codigo asc',
          :include => :resposta_matriz
</code>```

Well the fragment that matters is the "order". Codigo is a varchar column wich will contain in most cases numeric values. To show this data I need to order it by code, but when I have only numbers the order becomes awkward, something like:

1, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 2, 20, ...

What do you suggest for me to solve it?

Thanks.

答:
I'm kind of just a beginner with Ruby, but could you use something like the following to split the string into an array of smaller strings, then convert each string to an integer.

I don't have my rubydoc in front of me, but something like

```<code>:order => 'respostas_matriz.codigo.split.map {|s| s.to_i}'
</code>```

OwnerDisplayName: Ricardo Acras

Title: How to order string columns differently

Body:
I have a has_many association like this:

has_many  :respostas_matriz_alternativas, :class_name => 'RespostaMatrizAlternativa',
          :order => 'respostas_matriz.codigo asc',
          :include => :resposta_matriz

Well the fragment that matters is the "order". Codigo is a varchar column wich will contain in most cases numeric values. To show this data I need to order it by code, but when I have only numbers the order becomes awkward, something like:

1, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 2, 20, ...

What do you suggest for me to solve it?

Thanks.

Body:
I'm kind of just a beginner with Ruby, but could you use something like the following to split the string into an array of smaller strings, then convert each string to an integer.

I don't have my rubydoc in front of me, but something like

:order => 'respostas_matriz.codigo.split.map {|s| s.to_i}'

OwnerDisplayName: Phog


问:
Center content vertically on Vuetify
Is there a way to center content vertically in Vuetify?

With the text-xs-center helper class, the content gets centered horizontally only:

```<code><v-container grid-list-md text-xs-center>
  <v-layout row wrap>
     <v-flex xs12>
       Hello
     </v-flex>
  </v-layout>
</code>```

From the API, I tested some other helper classes such as align-content-center but did not achieve the result.

答:
<v-container> has to be right after <template>, if there is a
 in between, the vertical align will just not work.

<template>
  <v-container fill-height>
      <v-row class="justify-center align-center">
        <v-col cols="12" sm="4">
            Centered both vertically and horizontally
        </v-col>
      </v-row>
  </v-container>
</template>
```

Title: Center content vertically on Vuetify

Body:
Is there a way to center content vertically in Vuetify?

With the text-xs-center helper class, the content gets centered horizontally only:

<v-container grid-list-md text-xs-center>
  <v-layout row wrap>
     <v-flex xs12>
       Hello
     </v-flex>
  </v-layout>

From the API, I tested some other helper classes such as align-content-center but did not achieve the result.

Body:
<v-container> has to be right after <template>, if there is a <div> in between, the vertical align will just not work.

<template>
  <v-container fill-height>
      <v-row class="justify-center align-center">
        <v-col cols="12" sm="4">
            Centered both vertically and horizontally
        </v-col>
      </v-row>
  </v-container>
</template>


问:
Horizontally Distribute Inner-Divs of 3-Column Container Without Using Percentages? - Flex
I'm wondering if there's a better way to evenly space the three divs within a parent div (horizontally) using flex. Here's what I have:

.container {
    display: flex;
}
.left-div, .middle-div, .right-div {
    display: flex;
    justify-content: center;
    width: 33.3%;
}```
<pre class="snippet-code-html lang-html prettyprint-override"><code><!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Demo</title>
</head>
<body>
    <div class="container">
        <div class="left-div">
            Left
        </div>
        <div class="middle-div">
            Middle
        </div>
        <div class="right-div">
            Right
        </div>
    </div>
</body>
</html></code>```

As you can see, I set each child-div / column to width: 33.3% - is there a CSS property that will automatically force them to span 100% width of their parent, collectively, without using percentages?

If I get rid of width: 33%, I get this:

.container {
        display: flex;
}
.left-div, .middle-div, .right-div {
        display: flex;
        justify-content: center;
        /*width: 33.3%;*/
}```
<pre class="snippet-code-html lang-html prettyprint-override"><code><!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Demo</title>
</head>
<body>
    <div class="container">
        <div class="left-div">
            Left
        </div>
        <div class="middle-div">
            Middle
        </div>
        <div class="right-div">
            Right
        </div>
    </div>
</body>
</html></code>```

I also tried setting the parent div to justify-content: space-between;, but this is now forcing the content of the inner divs to get aligned to the left (for the left div) or to the right (for the right div):

.container {
        display: flex;
        justify-content: space-between;
}
.left-div, .middle-div, .right-div {
        display: flex;
        justify-content: center;
        /*width: 33.3%;*/
}```
<pre class="snippet-code-html lang-html prettyprint-override"><code><!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Demo</title>
</head>
<body>
    <div class="container">
        <div class="left-div">
            Left
        </div>
        <div class="middle-div">
            Middle
        </div>
        <div class="right-div">
            Right
        </div>
    </div>
</body>
</html></code>```

I know that setting each child div to width: 33% works, but is there a better way? Without having to calculate percentages if I wanted 7 columns, for example?

答:
You're almost there, just try with justify-content: space-around;

As a plus, I'd recommend you have a look at this guide for a lot of interesting flexbox explanations :)

.container {
        display: flex;
        justify-content: space-around;
}
.left-div, .middle-div, .right-div {
        display: flex;
        justify-content: center;
        /*width: 33.3%;*/
}```
<pre class="snippet-code-html lang-html prettyprint-override"><code><!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Demo</title>
</head>
<body>
    <div class="container">
        <div class="left-div">
            Left
        </div>
        <div class="middle-div">
            Middle
        </div>
        <div class="right-div">
            Right
        </div>
    </div>
</body>
</html></code>```

Body:
I'm wondering if there's a better way to evenly space the three divs within a parent div (horizontally) using flex. Here's what I have:

.container {
    display: flex;
}
.left-div, .middle-div, .right-div {
    display: flex;
    justify-content: center;
    width: 33.3%;
}

<!DOCTYPE html>

    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Demo</title>

            Left

            Middle

            Right

As you can see, I set each child-div / column to width: 33.3% - is there a CSS property that will automatically force them to span 100% width of their parent, collectively, without using percentages?

If I get rid of width: 33%, I get this:

.container {
        display: flex;
}
.left-div, .middle-div, .right-div {
        display: flex;
        justify-content: center;
        /*width: 33.3%;*/
}

<!DOCTYPE html>

    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Demo</title>

            Left

            Middle

            Right

I also tried setting the parent div to justify-content: space-between;, but this is now forcing the content of the inner divs to get aligned to the left (for the left div) or to the right (for the right div):

.container {
        display: flex;
        justify-content: space-between;
}
.left-div, .middle-div, .right-div {
        display: flex;
        justify-content: center;
        /*width: 33.3%;*/
}

<!DOCTYPE html>

    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Demo</title>

            Left

            Middle

            Right

I know that setting each child div to width: 33% works, but is there a better way? Without having to calculate percentages if I wanted 7 columns, for example?

Body:
You're almost there, just try with justify-content: space-around;

As a plus, I'd recommend you have a look at this guide for a lot of interesting flexbox explanations :)

.container {
        display: flex;
        justify-content: space-around;
}
.left-div, .middle-div, .right-div {
        display: flex;
        justify-content: center;
        /*width: 33.3%;*/
}

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Demo</title>
</head>
<body>
    <div class="container">
        <div class="left-div">
            Left
        </div>
        <div class="middle-div">
            Middle
        </div>
        <div class="right-div">
            Right
        </div>
    </div>
</body>
</html>