Описание ошибки
Мы настроили istio на кластере eks, и в нем размещено приложение java. Под был создан вместе с сервисом типа ClusterIP.
Мы создали виртуальную службу, шлюз и установили входной шлюз istio в качестве NodePort. Перед входным шлюзом istio мы разместили AWS Application Load Balancer. Мы создали запись route53 (DNS), которая указывает на вышеупомянутый ALB
Теперь все сервисы и модули РАБОТАЮТ
Теперь при обращении к DNS с https информация запроса, которую мы получаем в вышеупомянутом Java-приложении Spring Boot, была изменена с https на http с портом 443.
Например: если я сделаю запрос curl, чтобы сказать curl https://sarath.somedomain.com/helloworld
в нашем Java-приложении, пока мы получаем информацию о запросе, мы получаем их как http://sarath.somedomain.com:443/helloworld
Также мы напечатали заголовки, такие как x-forwarded-proto, x-forwarded-port, в нашем приложении Java.
x-forwarded-proto
значение, которое мы получаем в приложении Java, равно http
x-forwarded-port
значение, которое мы получаем в приложении Java, равно 443
x-forwarded-for
значение, которое мы получаем в приложении Java, равно null
Наши основные подозрения связаны с посланником, который выполняет преобразование этого протокола с https в http.
Ожидаемое поведение
Если я нажму, скажи curl https://sarath.somedomain.com/helloworld
, в нашем java-приложении мы должны получить информацию о запросе как https://sarath.somedomain.com/helloworld
Действия по воспроизведению ошибки
Шлюз:
apiVersion: networking.istio.io/v1alpha3
kind: Gateway
metadata:
name: sarath-gateway
spec:
selector:
istio: ingressgateway # use Istio default gateway implementation
servers:
- port:
number: 80
name: http
protocol: HTTP
hosts:
- "sarath.somedomain.com"
- "prasath.somedomain.com"
Виртуальный сервис:
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: sp-vs
spec:
hosts:
- "sarath.somedomain.com"
gateways:
- sarath-gateway
http:
- match:
- uri:
prefix: /
route:
- destination:
port:
number: 80
host: javaapp-svc
ALB Ingress:
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: sarathingress
namespace: istio-system
annotations:
kubernetes.io/ingress.class: alb
alb.ingress.kubernetes.io/scheme: internet-facing
alb.ingress.kubernetes.io/listen-ports: '[{"HTTPS":443}]'
alb.ingress.kubernetes.io/subnets: subnet-XXXXXXXX,subnet-XXXXXXXX
alb.ingress.kubernetes.io/security-groups: sg-XXXXXXXX
alb.ingress.kubernetes.io/certificate-arn: arn:aws:acm:us-east-1:XXXXXXXX:certificate/XXXXXXXX
spec:
rules:
- host: sarath.somedomain.com
http:
paths:
- path: /*
backend:
serviceName: istio-ingressgateway
servicePort: 80
Служба приложений:
apiVersion: v1
kind: Service
metadata:
name: javaapp-svc
labels:
app: javaapp-svc
name: javaapp-svc
spec:
selector:
app: javaapp-svc
ports:
- name: http
port: 80
targetPort: 9090
protocol: TCP
Версия (включая вывод istioctl version --remote
и kubectl version
)
Выход istioctl version --remote
:
версия клиента: 1.2.5 версия цитадели: 1.2.5 версия камбуза: 1.2.5 версия входного шлюза: 1.2.5 пилотная версия: 1.2.5 версия политики: 1.2.5 версия инжектора коляски: 1.2.5 версия телеметрии: 1.2.5
Выход kubectl version
:
Версия клиента: version.Info {Major: «1», Minor: «12», GitVersion: «v1.12.7», GitCommit: «6f482974b76db3f1e0f5d24605a9d1d38fad9a2b», GitTreeState: «clean», BuildDate: «2019-03-29T 10Z ", GoVersion:" go1.10.8 ", Compiler:" gc ", Platform:" linux / amd64 "} Версия сервера: version.Info {Major:" 1 ", Minor:" 13+ ", GitVersion:" v1. 13.10-eks-5ac0f1 ", GitCommit:" 5ac0f1d9ab2c254ea2b0ce3534fd72932094c6e1 ", GitTreeState:" clean ", BuildDate:" 2019-08-20T22: 39: 46Z ", GoVersion:" go1.11.13c ", Платформа:" Компилятор: " linux / amd64 "}
Как был установлен Istio?
Istio устанавливается через helm, ниже используется команда:
helm install install/kubernetes/helm/istio-init --name istio-init --namespace istio-system
helm template \
--set gateways.istio-ingressgateway.type=NodePort \
--set prometheus.enabled=true \
--set grafana.enabled=true \
--set tracing.enabled=true \
--set kiali.enabled=true \
--set "kiali.dashboard.jaegerURL=http://jaeger-query:16686" \
--set "kiali.dashboard.grafanaURL=http://grafana:3000" \
install/kubernetes/helm/istio \
--name istio --namespace istio-system > $HOME/istio.yaml
Среда, в которой обнаружена ошибка (поставщик облака, ОС и т. Д.)
AWS, машина EC2, Amazon Linux версии 2