#kubernetes-ingress #minikube
#kubernetes-вход #minikube
Вопрос:
В настоящее время я работаю над развертыванием ELK stack в кластере kubernetes, я успешно смог использовать службу ClusterIP и nginx-ingress в minikube для маршрутизации входящего http-трафика в kibana (порт 5601), нужны данные о том, как я могу маршрутизировать трафик на основе входящего порта, а не пути?
Используя приведенное ниже объявление объекта Ingress, я успешно смог подключиться к своему развертыванию kibana, но как я могу получить доступ к другому стеку инструментов, доступному на разных портах (9200, 5044, 9600)?
---
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
annotations:
kubernetes.io/ingress.class: nginx
name: ingress-service
spec:
rules:
- http:
paths:
- path: /
backend:
serviceName: kibana-service
servicePort: 5601
Скручивание minikube ip
на порту 80 по умолчанию возвращает допустимый ответ
# curl http://<minikube-ip>/api/status
{"name":"kibana",....}
Примечание: я бы не хотел использовать NodePort, но хотел бы знать, является ли nodeport единственным способом достижения вышеуказанного?
Комментарии:
1. Вы можете попробовать использовать несколько путей . Через некоторое время я подготовлю ответ с описанием.
Ответ №1:
Поскольку у вас уже есть мини-куб и minikube ingress addon
включен:
$ minikube addons list | grep ingress
| ingress | minikube | enabled ✅ |
| ingress-dns | minikube | enabled ✅ |
Просто как напоминание:
targetPort
: является ли порт, на который контейнер принимает трафик (порт, на котором приложение запускается внутри модуля).
port
: является абстрагированным Service port
, который может быть любым портом, используемым другими модулями для доступа к Service
.
Пожалуйста, имейте в виду, что если ваш контейнер не будет прослушивать порт, указанный в targetPort
, вы не сможете подключиться к pod. Также помните о конфигурации брандмауэра для разрешения трафика.
Например, я использовал этот yamls:
apiVersion: v1
kind: Service
metadata:
name: service-one
spec:
selector:
key: application-1
ports:
- port: 81
targetPort: 8080
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: deployment-1
spec:
replicas: 1
selector:
matchLabels:
key: application-1
template:
metadata:
labels:
key: application-1
spec:
containers:
- name: hello1
image: gcr.io/google-samples/hello-app:1.0
imagePullPolicy: IfNotPresent
ports:
- containerPort: 8080
---
apiVersion: v1
kind: Service
metadata:
name: service-two
spec:
selector:
key: application-2
ports:
- port: 82
targetPort: 8080
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: deployment-2
spec:
replicas: 1
selector:
matchLabels:
key: application-2
template:
metadata:
labels:
key: application-2
spec:
containers:
- name: hello2
image: gcr.io/google-samples/hello-app:2.0
imagePullPolicy: IfNotPresent
ports:
- containerPort: 8080
---
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
name: ingress
annotations:
kubernetes.io/ingress.class: nginx
spec:
rules:
- http:
paths:
- path: /hello
backend:
serviceName: service-one
servicePort: 81
- path: /hello2
backend:
serviceName: service-two
servicePort: 82
service/service-one created
deployment.apps/deployment-1 created
service/service-two created
deployment.apps/deployment-2 created
Warning: networking.k8s.io/v1beta1 Ingress is deprecated in v1.19 , unavailable in v1.22 ; use networking.k8s.io/v1 Ingress
ingress.networking.k8s.io/ingress created
Предупреждение: networking.k8s.io/v1beta1 Ingress устарел в версии v1.19 , недоступен в версии v1.22 ; используйте networking.k8s.io/v1 Вход
Пожалуйста, имейте в виду, что скоро Minikube изменится apiVersion
в соответствии с предупреждением выше.
Ниже вывод этой конфигурации:
$ curl http://172.17.0.3/hello
Hello, world!
Version: 1.0.0
Hostname: deployment-1-77ddb77d56-2l4cp
minikube-ubuntu18:~$ curl http://172.17.0.3/hello2
Hello, world!
Version: 2.0.0
Hostname: deployment-2-fb984955c-5dvbx
Вы могли бы использовать:
paths:
- path: /elasticsearch
backend:
serviceName: elasticsearch-service
servicePort: 100
- path: /anotherservice
backend:
serviceName: another-service
servicePort: 101
Где сервис будет выглядеть как:
name: elasticsearch-service
...
ports:
- port: 100
targetPort: 9200
---
name: another-service
...
ports:
- port: 101
targetPort: 5044
Однако, если вам потребуется более продвинутая path
конфигурация, вы также можете использовать перезапись. Также вы можете использовать default backend
для перенаправления на определенную службу.
Более подробную информацию о доступе к Minikube вы можете найти в документации Minikube.
Это то, что вы искали, или что-то другое?