Прежде всего для использования curl с SDS-шлюзом Вам необходимо использовать его, как описано в документации Istio .
$ curl -v -HHost:httpbin.example.com \
--resolve httpbin.example.com:$SECURE_INGRESS_PORT:$INGRESS_HOST \
--cacert httpbin.new.example.com/2_intermediate/certs/ca-chain.cert.pem \
https://httpbin.example.com:$SECURE_INGRESS_PORT/status/418
...
HTTP/2 418
...
-=[ teapot ]=-
_...._
.' _ _ `.
| ."` ^ `". _,
\_;`"---"`|//
| ;/
\_ _/
`"""`
Во-вторых, согласно Документация Istio , использующая строгую политику аутентификации mTLS (взаимный TLS), требует, чтобы обе службы выполняли связь TLS. В вашем случае вы пытаетесь получить доступ к текстовому (HTTP) сервису через Istio, который использует TLS. Это вызывает конфликт взаимной конфигурации TLS.
Это можно проверить с помощью команды istioctl
в этом разделе документации:
istioctl
Команда предоставляет опцию для этой цели. Вы можете сделать:
$ istioctl authn tls-check $CLIENT_POD httpbin.default.svc.cluster.local
HOST:PORT STATUS SERVER CLIENT AUTHN POLICY DESTINATION RULE
httpbin.default.svc.cluster.local:8000 OK mTLS mTLS default/ default/istio-system
Где $CLIENT_POD
- идентификатор одного из модулей клиентской службы.
См. Проверка конфигурации взаимной TLS длядополнительная информация.
Чтобы решить эту проблему, mTLS должен быть отключен для этой службы, чтобы Istio принимала подключение от простого текста к службам TLS. Следуйте этому руководству , чтобы создать правило назначения, разрешающее не-TLS-связь для указанной службы
. Чтобы подтвердить, что это вызывает эту проблему, вы можете временно включить режим Permissive . .
Редактировать:
По ссылке, указанной вами в последнем файле развертывания helloworld.yaml
, нет targetPort
, и поэтому nginx недоступен.
Вот как это должно выглядеть:
apiVersion: v1
kind: Service
metadata:
name: helloworld
labels:
app: helloworld
spec:
ports:
- port: 5000
name: http
targetPort: 80
selector:
app: helloworld
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: helloworld-v1
labels:
version: v1
spec:
replicas: 1
selector:
matchLabels:
app: helloworld
version: v1
template:
metadata:
labels:
app: helloworld
version: v1
spec:
terminationGracePeriodSeconds: 0
containers:
- name: helloworld
image: docker.io/istio/examples-helloworld-v1
resources:
requests:
cpu: "100m"
imagePullPolicy: IfNotPresent #Always
ports:
- containerPort: 5000
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: helloworld-v2
labels:
version: v2
spec:
replicas: 1
selector:
matchLabels:
app: helloworld
version: v2
template:
metadata:
labels:
app: helloworld
version: v2
spec:
terminationGracePeriodSeconds: 0
containers:
- name: helloworld
image: docker.io/istio/examples-helloworld-v2
resources:
requests:
cpu: "100m"
imagePullPolicy: IfNotPresent #Always
ports:
- containerPort: 5000