Доступ к сервису Kubernetes, преобразованному из Docker Compose
Я создал приложение с помощью Docker Compose, которое включало в себя экземпляр Nginx, принимающий соединения через порт 80:
nginx:
image: nginx:1.15.12-alpine
container_name: nginx
volumes:
- etc.
ports:
- 80:80
Я хотел бы раскрутить это приложение на Kubernetes, работающем на моей локальной машине (macOS). Итак, я бегу kompose convert
, документировано здесь.
Это генерируется nginx-service.yaml
который выглядит так:
apiVersion: v1
kind: Service
metadata:
annotations:
kompose.cmd: kompose convert
kompose.version: 1.18.0 ()
creationTimestamp: null
labels:
io.kompose.service: nginx
name: nginx
spec:
ports:
- name: "80"
port: 80
targetPort: 80
selector:
io.kompose.service: nginx
status:
loadBalancer: {}
Я побежал kubectl apply
со всеми файлами YAML, созданными kompose
, а потом kubectl describe svc nginx
:
Name: nginx
Namespace: myproject
Labels: io.kompose.service=nginx
Annotations: kompose.cmd=kompose convert
kompose.version=1.18.0 ()
kubectl.kubernetes.io/last-applied-configuration={"apiVersion":"v1","kind":"Service","metadata":{"annotations":{"kompose.cmd":"kompose convert","kompose.version":"1.18.0 ()"},"creationTimestamp":null,...
Selector: io.kompose.service=nginx
Type: ClusterIP
IP: 172.30.110.242
Port: 80 80/TCP
TargetPort: 80/TCP
Endpoints:
Session Affinity: None
Events: <none>
Однако я не могу получить доступ к веб-серверу, перейдя к http://172.30.110.242:80
на одной машине.
Есть документация по доступу к сервисам, работающим на кластерах. Я новичок в k8s, и я не уверен, как диагностировать проблему и выбрать правильное решение из перечисленных опций.
Это дефект в kompose
чтобы он не генерировал сопоставимый файл конфигурации службы?
1 ответ
Увидеть:
https://kubernetes.io/docs/concepts/services-networking/service/
Ваш URL "connect to" с вашего локального компьютера в мир K8 не будет "172.xxx". Вероятно, это будет 192.168.99.100:33333 (номер порта будет другим).. запустите это:
minikube service myservicename -n "default" --url
посмотрим, что это дает вам
но в основном вам нужно "разоблачить" мир k8 для внешнего мира.
этот yml должен помочь
apiVersion: v1
kind: Service
metadata:
name: myservicename
namespace: mycustomnamespace
labels:
name: myservicemetadatalabel
spec:
type: NodePort
ports:
- name: myfirstportname
port: 80
targetPort: 80
selector:
myexamplelabelone: mylabelonevalue
myexamplelabeltwo: mylabeltwovalue
селектор будет ссылаться на ваши настройки контейнера / контейнера.
apiVersion: v1
kind: Pod
metadata:
name: myfirstpodmetadataname
namespace: mycustomnamespace
labels:
myexamplelabelone: mylabelonevalue
myexamplelabeltwo: mylabeltwovalue
"селекторы" выходят за рамки этого вопроса... но приведенное выше даст вам необходимую крошку
также см:
Вам понадобится служба ingress или Nodeport/Loadbalancer, чтобы ваша служба была доступна извне.
Вы также можете попробовать использовать https://github.com/konveyor/move2kube для преобразования файла создания докеров.
move2kube translate -s <folder containing docker compose file>
Он спросит вас, какие сервисы вы хотите предоставить извне, и создаст для вас соответствующие входящие yamls.