#docker #rest #kubernetes #kubectl #minikube
#docker #rest #kubernetes #kubectl #minikube
Вопрос:
В настоящее время у меня есть докеризованное приложение Spring Boot с открытыми Java REST API, которые я развертываю на своем NUC (просто на удаленном компьютере) и могу подключиться к нему со своего Mac через статический IP-адрес NUC. Обе машины находятся в одной сети.
Сейчас я изучаю возможность размещения приложения Docker в Kubernetes (Minikube)
(используя этот учебник https://medium.com/bb-tutorials-and-thoughts/how-to-run-java-rest-api-on-minikube-4b564ea982cc ).
Я использовал инструмент Kompose из Kubernetes для преобразования моих файлов Docker compose в файлы развертываний и служб Kubernetes. Одна из служб, которую я пытаюсь запустить в первую очередь, просто открывает порт 8080 и имеет ряд ресурсов REST. Кажется, все запущено и работает, но я не могу получить доступ к ресурсам REST с моего Mac (или даже с самого NUC) с curl -v
помощью команды.
После устранения небольшой проблемы с моими образами Docker (требуется встроить во внутреннее хранилище Docker images Minikube), я могу успешно развернуть свои службы и развертывания. Существует ряд других, но для того, чтобы пройти этот шаг, я просто включу один:
$ kubectl get po -A
NAMESPACE NAME READY STATUS RESTARTS AGE
kube-system coredns-f9fd979d6-hhgn8 1/1 Running 0 7h
kube-system etcd-minikube 1/1 Running 0 7h
kube-system kube-apiserver-minikube 1/1 Running 0 7h
kube-system kube-controller-manager-minikube 1/1 Running 0 7h
kube-system kube-proxy-rszpv 1/1 Running 0 7h
kube-system kube-scheduler-minikube 1/1 Running 0 7h
kube-system storage-provisioner 1/1 Running 0 7h
meanwhileinhell apigw 1/1 Running 0 6h54m
meanwhileinhell apigw-75bc5z1f5j-cklxt 1/1 Running 0 6h54m
$ kubectl get service apigw
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
apigw NodePort 10.107.116.239 <none> 8080:32327/TCP 6h53m
$ kubectl cluster-info
Kubernetes master is running at https://192.168.44.2:8443
KubeDNS is running at https://192.168.44.2:8443/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy
Однако я не могу попасть на этот главный IP-адрес или любой ожидаемый открытый порт, используя статический IP-адрес моего NUC. Я пытался использовать типы сервисов LoadBalancer
и NodePort
для сервиса, но первый зависает pending
для внешнего IP-адреса.
Я немного поиграл с предоставлением портов и переадресацией портов, но не смог заставить что-либо работать (порт 7000 — это просто произвольное число):
kubectl port-forward apigw 7000:8080
kubectl expose deployment apigw --port=8080 --target-port=8080
Вот мои apigw
файлы развертывания, сервиса и pod yaml:
apigw-deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
creationTimestamp: null
labels:
io.kompose.service: apigw
name: apigw
spec:
replicas: 1
selector:
matchLabels:
io.kompose.service: apigw
strategy:
type: Recreate
template:
metadata:
creationTimestamp: null
labels:
io.kompose.network/networkinhell: "true"
io.kompose.service: apigw
spec:
containers:
image: meanwhileinhell/api-gw:latest
name: apigw
ports:
- containerPort: 8080
resources: {}
imagePullPolicy: Never
volumeMounts:
- mountPath: /var/log/gateway
name: combined-logs
hostname: apigw
restartPolicy: Always
volumes:
- name: combined-logs
persistentVolumeClaim:
claimName: combined-logs
status: {}
apigw-service.yaml
apiVersion: v1
kind: Service
metadata:
name: apigw
labels:
run: apigw
spec:
ports:
- port: 8080
protocol: TCP
selector:
app: apigw
type: NodePort
apigw-pod.yaml
apiVersion: v1
kind: Pod
metadata:
creationTimestamp: null
labels:
io.kompose.service: apigw
name: apigw
spec:
containers:
- image: meanwhileinhell/api-gw:latest
name: apigw
imagePullPolicy: Never
resources: {}
ports:
- containerPort: 8080
Используется kubectl create -f
для создания сервисов.
Ubuntu 18.04.5 LTS
Minikube v1.15.0
KubeCtl v1.19.4
Комментарии:
1. Какой драйвер minikube -driver вы используете?
2. Привет, Мэтт, я использую драйвер Linux Docker
minikube config set driver docker
3. Используете ли вы kubectl со своего Mac? или удаленный хост?
4. Я запускаю его с удаленного хоста.
5. Попробуйте
kubectl port-forward apigw 7000:8080 --address 0.0.0.0