Home > Enterprise >  Unable to make request to service running in Minikube tunnel
Unable to make request to service running in Minikube tunnel

Time:06-15

I am working on an API that I will deploy with Kubernetes and I want to test it locally.

I created the Docker image, successfully tested it locally, and pushed it to a public Docker registry. Now I would like to deploy in a Kubernetes cluster and there are no errors being thrown, however, I am not able to make a request to the endpoint exposed by the Minikube tunnel.

Steps to reproduce:

  1. Start Minikube container: minikube start --ports=127.0.0.1:30000:30000
  2. Create deployment and service: kubectl apply -f fastapi.yaml
  3. Start minikube tunnel: minikube service fastapi-server

Encountered the following error: 192.168.49.2 took too long to respond.

requirements.txt:

anyio==3.6.1
asgiref==3.5.2
click==8.1.3
colorama==0.4.4
fastapi==0.78.0
h11==0.13.0
httptools==0.4.0
idna==3.3
pydantic==1.9.1
python-dotenv==0.20.0
PyYAML==6.0
sniffio==1.2.0
starlette==0.19.1
typing_extensions==4.2.0
uvicorn==0.17.6
watchgod==0.8.2
websockets==10.3

main.py:

from fastapi import FastAPI

app = FastAPI()

@app.get("/")
async def root():
    return {"status": "OK"}

Dockerfile:

FROM python:3.9

WORKDIR /

COPY . .

RUN pip install --no-cache-dir --upgrade -r ./requirements.txt

EXPOSE 8000

CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8000"]

fastapi.yaml:

# deployment
apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: fastapi-server
  name: fastapi-server
spec:
  replicas: 1
  selector:
    matchLabels:
      app: fastapi-server
  template:
    metadata:
      labels:
        app: fastapi-server
    spec:
      containers:
        - name: fastapi-server
          image: smdf/fastapi-test
          ports:
            - containerPort: 8000
              name: http
              protocol: TCP
---
# service
apiVersion: v1
kind: Service
metadata:
  labels:
    app: fastapi-server
  name: fastapi-server
spec:
  type: LoadBalancer
  ports:
    - port: 8000
      targetPort: 8000
      protocol: TCP
      nodePort: 30000

CodePudding user response:

Your problem is that you did not set the service selector:

# service
apiVersion: v1
kind: Service
metadata:
  labels:
    app: fastapi-server
  name: fastapi-server
spec:
  selector:               <------------- Missing part
    app: fastapi-server   <-------------
  type: NodePort          <------------- Set the type to NodePort 
  ports:
    - port: 8000
      targetPort: 8000
      protocol: TCP
      nodePort: 30000

How to check if your service is defined properly?

I checked to see if there are any endpoints, and there weren't any since you did not "attach" the service to your deployment

kubectl get endpoints -A

enter image description here


enter image description here


For more info you can read this section under my GitHub https://github.com/nirgeier/KubernetesLabs/tree/master/Labs/05-Services


  • Related