У меня есть следующее приложение, которое я могу успешно запустить в K8S, которое использует сервис с балансировщиком нагрузки типа, очень простое приложение с двумя маршрутами
/
- вы должны увидеть «привет приложение»
/api/books
должен предоставить список книг в формате json
Это service
apiVersion: v1
kind: Service
metadata:
name: go-ms
labels:
app: go-ms
tier: service
spec:
type: LoadBalancer
ports:
- port: 8080
selector:
app: go-ms
Это развертывание
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: go-ms
labels:
app: go-ms
spec:
replicas: 2
template:
metadata:
labels:
app: go-ms
tier: service
spec:
containers:
- name: go-ms
image: rayndockder/http:0.0.2
ports:
- containerPort: 8080
env:
- name: PORT
value: "8080"
resources:
requests:
memory: "64Mi"
cpu: "125m"
limits:
memory: "128Mi"
cpu: "250m"
после применения обоих yamls и при вызове URL:
http://b0751-1302075110.eu-central-1.elb.amazonaws.com/api/books
Я смог увидеть данные в браузере, как и ожидалось, а также для корневого приложения, используя только внешний ip
Теперь я хочу использовать istio
, поэтому я следую руководству и успешно установлю его через helm
используя https://istio.io/docs/setup/kubernetes/install/helm/ и убедитесь, что все 53 crd есть, а также istio-system
компоненты (такие как istio-ingressgateway
istio-pilot
и т. Д. Все 8 развертываний запущены и работают)
Я изменил услугу выше с LoadBalancer
на NodePort
и создайте следующую конфигурацию istio
в соответствии с istio docs
apiVersion: networking.istio.io/v1alpha3
kind: Gateway
metadata:
name: http-gateway
spec:
selector:
istio: ingressgateway
servers:
- port:
number: 8080
name: http
protocol: HTTP
hosts:
- "*"
---
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: virtualservice
spec:
hosts:
- "*"
gateways:
- http-gateway
http:
- match:
- uri:
prefix: "/"
- uri:
exact: "/api/books"
route:
- destination:
port:
number: 8080
host: go-ms
кроме того, я добавил следующее
kubectl label namespace books istio-injection=enabled
, где развернуто приложение,
Теперь, чтобы получить внешний Ip, я использовал команду
kubectl get svc -n istio-system -l istio=ingressgateway
и получите это в external-ip
b0751-1302075110.eu-central-1.elb.amazonaws.com
при попытке доступа к URL
http://b0751-1302075110.eu-central-1.elb.amazonaws.com/api/books
Я получил ошибку:
Этот сайт недоступен
ERR_CONNECTION_TIMED_OUT
если я запускаю докер rayndockder/http:0.0.2
через
docker run -it -p 8080:8080 httpv2
I путь работает правильно!
Любая идея / подсказка В чем может быть проблема?
Есть ли способ trace istio
конфигов, чтобы увидеть, если что-то отсутствует или у нас может быть какой-то сговор с портом или сетевой политикой, может быть?
Кстати, развертывание и обслуживание могут выполняться на каждом кластере, чтобы кто-то мог помочь в тестировании ...
если я изменить все на порт на 80
(во всех файлах yaml и в приложении и в докере), я смог получить данные для корневого пути, но не для "api / books" "