Istio: как настроить HTTPS-трафик между сервисами на Minikube?

В настоящее время я изучаю Istio и столкнулся с проблемой при попытке настроить HTTPS-трафик между контейнерами на локальном < тестовый кластер href = "https://kubernetes.io/docs/setup/minikube/" rel = "nofollow noreferrer"> Minikube.

В документации Istio есть несколько связанных задач. В частности, задача https://istio.io/docs/tasks/security/https-overlay/. Мне удалось выполнить первую подзадачу (без связующего элемента в запрашивающем контейнере), но второй завершается с ошибкой при отправке запроса к развертыванию nginx из модуля сна:

$ kubectl exec $(kubectl get pod -l app=sleep -o jsonpath={.items..metadata.name}) -c sleep -- curl https://my-nginx -k
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                Dload  Upload   Total   Spent    Left  Speed
  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0
curl: (35) error:1401E410:SSL routines:CONNECT_CR_FINISHED:sslv3 alert handshake failure
command terminated with exit code 35

Я предполагаю, что моя установка виновата, но я не могу точно сказать, что не так (или как отлаживать). Может кто-нибудь взглянуть и предложить исправление?

Шаги настройки приведены ниже в разделе Настройка. Спецификации окружающей среды показаны ниже.


Среда

OS

macOS 10.13.6

kubectl версия

$ kubectl version
Client Version: version.Info{Major:"1", Minor:"12", GitVersion:"v1.12.3", GitCommit:"435f92c719f279a3a67808c80521ea17d5715c66", GitTreeState:"clean", BuildDate:"2018-11-27T01:15:02Z", GoVersion:"go1.11.2", Compiler:"gc", Platform:"darwin/amd64"}
Server Version: version.Info{Major:"1", Minor:"10", GitVersion:"v1.10.0", GitCommit:"fc32d2f3698e36b93322a3465f63a14e9f0eaead", GitTreeState:"clean", BuildDate:"2018-03-26T16:44:10Z", GoVersion:"go1.9.3", Compiler:"gc", Platform:"linux/amd64"}

minikube версия:

 $ minikube version
 minikube version: v0.31.0

Настраивать

$ISTIO_HOME должен указывать на расположение установки Istio.

1. Запустите скрипт запуска Minikube + Istio.

Предупреждение. Это остановит и удалит работающий экземпляр minikube.

#! /bin/bash
minikube stop;
minikube delete;
minikube start \
  --memory=8192 \
  --cpus=4 \
  --kubernetes-version=v1.10.0\
  --vm-driver=virtualbox; 
kubectl apply -f $ISTIO_HOME/install/kubernetes/helm/istio/templates/crds.yaml 
kubectl apply -f $ISTIO_HOME/install/kubernetes/istio-demo.yaml
# Set docker registry to minikube registry
eval $(minikube docker-env);

2. Запустите сценарий установки теста HTTPS.

Подождите, пока модули Istio не будут запущены или завершены, а затем

#! /bin/bash
openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /tmp/nginx.key -out /tmp/nginx.crt -subj "/CN=my-nginx/O=my-nginx"
kubectl create secret tls nginxsecret --key /tmp/nginx.key --cert /tmp/nginx.crt
kubectl create configmap nginxconfigmap --from-file=$ISTIO_HOME/samples/https/default.conf
kubectl apply -f <(istioctl kube-inject -f $ISTIO_HOME/samples/https/nginx-app.yaml)
kubectl apply -f <(istioctl kube-inject -f $ISTIO_HOME/samples/sleep/sleep.yaml)

3. Отправить запрос к Nginx из модуля сна.

Подождите, пока оба модуля начнут работать, а затем запустите

kubectl exec $(kubectl get pod -l app=sleep -o jsonpath={.items..metadata.name}) -c sleep -- curl https://my-nginx -k

Согласно описание подзадачи, мы должны увидеть целевую страницу nginx, но вместо этого будет возвращена ошибка, показанная выше (код выхода 35, сбой рукопожатия).


person FK82    schedule 10.01.2019    source источник


Ответы (1)


Похоже, вы столкнулись с этой ошибкой https://github.com/istio/istio/issues/7844, который все еще открыт

person coolinuxoid    schedule 11.01.2019
comment
Я так не думаю, установка, которую я выполняю, не включает взаимный TLS (установочный файл $ISTIO_HOME/install/kubernetes/istio-demo.yaml этого не делает). - person FK82; 11.01.2019