<p>I have two deployments </p>

<p>deployment 1</p>

<pre><code>apiVersion: v1
kind: Service
metadata:
  name: first-service
spec:
  selector:
    key: app1
  ports:
    - port: 81
      targetPort: 5050

---

apiVersion: apps/v1
kind: Deployment
metadata:
  name: first-deployment
spec:
  replicas: 1
  selector:
    matchLabels:
      run: app1
  template:
    metadata:
      labels:
        run: app1
    spec:
      containers:
      - name: ocr
        image: ocr_app
        imagePullPolicy: IfNotPresent
        ports:
        - containerPort: 5050
</code></pre>

<p>deployment 2</p>

<pre><code>apiVersion: v1
kind: Service
metadata:
  name: second-service
spec:
  selector:
    key: app2
  ports:
    - port: 82
      targetPort: 5000

---

apiVersion: apps/v1
kind: Deployment
metadata:
  name: second-deployment
spec:
  replicas: 1
  selector:
    matchLabels:
      run: app2
  template:
    metadata:
      labels:
        run: app2
    spec:
      containers:
      - name: ner
        image: ner_app
        imagePullPolicy: IfNotPresent
        ports:
        - containerPort: 5000
</code></pre>

<p>After enabling ingress on minikube I applied ingess</p>

<pre><code>apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  name: ingress
spec:
  rules:
  - host: demo.local
    http:
      paths:
      - path: /ocr
        backend:
          serviceName: first-service
          servicePort: 81
      - path: /ner
        backend:
          serviceName: second-service
          servicePort: 82
</code></pre>

<p>In my hosts file I have </p>

<pre><code>192.168.177.71  demo.local
</code></pre>

<p>Where <code>192.168.177.71</code> is my current minikube ip</p>

<p>I then ran this command</p>

<pre><code>kubectl port-forward nginx-ingress-controller-6fc5bcc8c9-p6mvj 3000:80 --namespace kube-system
</code></pre>

<p>And in the console is outputs </p>

<pre><code>Forwarding from 127.0.0.1:3000 -&gt; 80
Forwarding from [::1]:3000 -&gt; 80
</code></pre>

<p>But when I make a request to <code>demo.local:3000/ocr</code> using postman there is no response</p>

<blockquote>
  <p>Could not get any response There was an error connecting to
  demo.local:3000.</p>
</blockquote>

<p>EDIT:  using <code>minikube service first-service</code> gives this output</p>

<pre><code>PS D:\docker&gt; minikube service first-service
|-----------|---------------|-------------|--------------|
| NAMESPACE |     NAME      | TARGET PORT |     URL      |
|-----------|---------------|-------------|--------------|
| default   | first-service |             | No node port |
|-----------|---------------|-------------|--------------|
* service default/first-service has no node port
</code></pre>

<p>@erotavlas as Mafor provided answer which help you resolve your issue please accept his answer. </p>

<p>I am posting extended answer which might help someone else.</p>

<p>Root cause of this Issue was with <code>selector/labels</code>. </p>

<p>In <code>first-service</code>, <code>spec.selector</code> was set to <code>key: app1</code>, however in deployment <code>spec.selector.matchLabels</code> was set to <code>run: app1</code>. </p>

<p>To proper work you need to have the same selectors. So you would need to change in service, spec.selector to <code>run: app1</code> or change deployment <code>spec.selector.matchLabels</code> to <code>key: app1</code>. Same situation with <code>second-service</code> and <code>second-deployment</code>. More details can be found <a href="https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/#label-selectors" rel="noreferrer">here</a>.</p>

<p>I've tried to use Ingress on Minikube based on <a href="https://kubernetes.io/docs/concepts/services-networking/connect-applications-service/" rel="noreferrer">official docs</a> and your YAMLs.</p>

<p>As addition, to use <code>Ingress</code> on <code>Minikube</code>, <code>Ingress addon</code> must be enabled.</p>

<pre><code>$ minikube addons list | grep ingress
- ingress: disabled
</code></pre>

<p>If it's disabled, you have to enable it.</p>

<pre><code>$ minikube addons enable ingress
✅  ingress was successfully enabled
</code></pre>

<p><code>targetPort:</code> is the port the container accepts traffic on / port where application runs inside the pod<br>
<code>port:</code> is the abstracted <code>Service</code> port, which can be any port other pods use to access the Service. </p>

<p>OP used own images where application was running on ports <code>5050</code> and <code>5000</code>, for this example I will use GCP hello world on port <code>8080</code>. Labels/matchLabels were changed to have the sam value in deployment and service.</p>

<p><strong>First service</strong></p>

<pre><code>apiVersion: v1
kind: Service
metadata:
  name: first-service
spec:
  selector:
    key: app1
  ports:
    - port: 81
      targetPort: 8080

---

apiVersion: apps/v1
kind: Deployment
metadata:
  name: first-deployment
spec:
  replicas: 1
  selector:
    matchLabels:
      key: app1
  template:
    metadata:
      labels:
        key: app1
    spec:
      containers:
      - name: hello1
        image: gcr.io/google-samples/hello-app:1.0
        imagePullPolicy: IfNotPresent
        ports:
        - containerPort: 8080

service/first-service created
deployment.apps/first-deployment created
</code></pre>

<p><strong>Second Service</strong></p>

<pre><code>apiVersion: v1
kind: Service
metadata:
  name: second-service
spec:
  selector:
    key: app2
  ports:
    - port: 82
      targetPort: 8080

---

apiVersion: apps/v1
kind: Deployment
metadata:
  name: second-deployment
spec:
  replicas: 1
  selector:
    matchLabels:
      key: app2
  template:
    metadata:
      labels:
        key: app2
    spec:
      containers:
      - name: hello2
        image: gcr.io/google-samples/hello-app:2.0
        imagePullPolicy: IfNotPresent
        ports:
        - containerPort: 8080

service/second-service created
deployment.apps/second-deployment created
</code></pre>

<p>It crated services as <code>ClusterIP</code> type. If need you can use <code>NodePort</code> but it's not neccessary.</p>

<p><strong>Apply Ingress</strong></p>

<p>Ingress provided in question is enough to tests.</p>

<p>As mentioned in <a href="https://kubernetes.io/docs/tasks/access-application-cluster/ingress-minikube/#create-an-ingress-resource" rel="noreferrer">official docs</a>. You should add minikube ip to host file.</p>

<blockquote>
  <p>Note: If you are running Minikube locally, use minikube ip to get the external IP. The IP address displayed within the ingress list will be the internal IP.</p>
</blockquote>

<p>In Ubuntu OS it's <code>/etc/hosts</code> (need to use sudo to edit). In Windows OS please check <a href="https://www.liquidweb.com/kb/edit-host-file-windows-10/" rel="noreferrer">this article</a></p>

<p>For my cluster (Using GCE):</p>

<pre><code>$ minikube ip
10.132.15.208
</code></pre>

<p>Added to <code>hosts</code> file value: </p>

<blockquote>
  <p>10.132.15.208 demo.local</p>
</blockquote>

<p>Below responses.</p>

<pre><code>$ curl demo.local/ocr
Hello, world!
Version: 1.0.0
Hostname: first-deployment-85b75bf4f9-qlzrp
$ curl demo.local/ner
Hello, world!
Version: 2.0.0
Hostname: second-deployment-5b5bbb7f4-9sbqr
</code></pre>

<p>However, version with <code>rewrite</code> provided by Mafor is more versatile.</p>

<p>In addition, You could also consider use <code>LoadBalancer</code> on <code>Minikube</code>. 
More information can be found in <a href="https://minikube.sigs.k8s.io/docs/tasks/loadbalancer/" rel="noreferrer">Minikube docs</a>.</p>
