Моя среда: Ma c dev-машина с последней версией Minikube / Docker
Я создал (локально) простой docker образ с простым Django REST API "hello world" .I Я запускаю развертывание с 3 репликами. Это мой yaml
файл для его определения:
apiVersion: v1
kind: Service
metadata:
name: myproj-app-service
labels:
app: myproj-be
spec:
type: LoadBalancer
ports:
- port: 8000
selector:
app: myproj-be
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: myproj-app-deployment
labels:
app: myproj-be
spec:
replicas: 3
selector:
matchLabels:
app: myproj-be
template:
metadata:
labels:
app: myproj-be
spec:
containers:
- name: myproj-app-server
image: myproj-app-server:4
ports:
- containerPort: 8000
env:
- name: DATABASE_URL
value: postgres://myname:@10.0.2.2:5432/myproj2
- name: REDIS_URL
value: redis://10.0.2.2:6379/1
Когда я применяю это yaml
, оно генерирует вещи правильно. - одно развертывание - одно обслуживание - три модуля
Развертывания:
NAME READY UP-TO-DATE AVAILABLE AGE
myproj-app-deployment 3/3 3 3 79m
Службы:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 83m
myproj-app-service LoadBalancer 10.96.91.44 <pending> 8000:31559/TCP 79m
Отделения:
NAME READY STATUS RESTARTS AGE
myproj-app-deployment-77664b5557-97wkx 1/1 Running 0 48m
myproj-app-deployment-77664b5557-ks7kf 1/1 Running 0 49m
myproj-app-deployment-77664b5557-v9889 1/1 Running 0 49m
Интересное Дело в том, что когда я SSH
в Minikube
и нажимаю на сервис, используя curl 10.96.91.44:8000
, он учитывает тип сервиса LoadBalancer
и вращается между всеми тремя модулями, когда я снова и снова нажимаю на конечные точки. Я могу видеть, что в возвращенных результатах, которые я обязательно включил в HOSTNAME модуля.
Однако, когда я пытаюсь получить доступ к услуге с моего хостинга Ma c - используя kubectl port-forward service/myproj-app-service 8000:8000
- - Каждый раз, когда я достигаю конечной точки, я получаю один и тот же модуль для ответа. Это не загружает баланс. Я ясно вижу это, когда я kubectl logs -f <pod>
обращаюсь ко всем трем модулям, и только один из них обрабатывает попадания, поскольку два других бездействуют ...
Это ограничение kubectl port-forward
или проблема? или я что-то здесь упускаю?