istio-demo
9 месяцев назад
3 дня назад
9 месяцев назад
9 месяцев назад
9 месяцев назад
9 месяцев назад
README.md
Демонстрационное микросервисное приложение с интеграцией Istio Service Mesh
Состав проекта
| Сервис | Описание |
|---|---|
| Веб-сервис для тестирования входящих запросов |
| Клиент для тестирования подключения к СУБД PostgreSQL |
| Граничный шлюз, обслуживающий входящие запросы в Service Mesh |
| Граничный шлюз, обслуживающий исходящие запросы из Service Mesh |
| IdP-провайдер для аутентификации входящих в Service Mesh запросов |
Конфигурация
Секция images
images
| Параметр | Описание |
|---|---|
| Docker-образ прикладного веб-сервиса |
| Docker-образ прокси Envoy |
| Docker-образ IdP-провайдера Keycloak для аутентификации и авторизации |
| Docker-образ СУБД PostgreSQL |
Секция cp
cp
| Параметр | Описание |
|---|---|
| Адрес Istiod — управляющего компонента Istio (control plane) в формате : |
Примечание: для запуска демонстрационного микросервисного приложения требуется предварительная настройка контрольной панели Istio
Секция keycloak
keycloak
| Параметр | Описание |
|---|---|
| Хост IdP-провайдера Keycloak в Kubernetes |
| IP-адрес или имя хоста базы данных PostgreSQL для Keycloak |
| Порт подключения к БД PostgreSQL, используемой Keycloak |
| Имя пользователя для подключения к БД Keycloak |
| Пароль пользователя БД Keycloak |
| Имя схемы в БД, которую использует Keycloak |
| Название базы данных, используемой Keycloak |
| Имя администратора Keycloak |
| Пароль администратора Keycloak |
| Realm (домен) в Keycloak |
Секция internal
internal
| Параметр | Описание |
|---|---|
| Хост прикладного веб-сервиса в Kubernetes |
Секция external
external
| Параметр | Описание |
|---|---|
| Доменное имя внешнего сервера PostgreSQL |
| IP-адрес сервера PostgreSQL |
| Порт сервера PostgreSQL |
| Хост внешнего веб-сервиса |
| IP-адрес внешнего веб-сервиса |
| Порт внешнего веб-сервиса. |
Секция idp
idp
| Параметр | Описание |
|---|---|
| URL Issuer Identity Provider для проверки JWT-токенов. |
| URI для получения публичных ключей JWKS для верификации подписи JWT |
Секция accessControl
accessControl
| Параметр | Описание |
|---|---|
| Регулярное выражение для проверки Subject в сертификате |
Секция certs
certs
| Параметр | Описание |
|---|---|
| Сертификат TLS граничного Egress-шлюза |
| Приватный ключ для сертификата граничного Egress-шлюза |
| Сертификат TLS прикладного сервиса |
| Приватный ключ для сертификата прикладного сервиса |
| Сертификат TLS для IdP-провайдера Keycloak |
| Приватный ключ для сертификата IdP-провайдера Keycloak |
| Корневой и промежуточные CA-сертификаты, доверенные и используемые в проекте |
Примечание: сертификаты и ключи указываются в формате PEM.
Установка Helm-чарта
helm install $RELEASE_NAME --namespace $NAMESPACE
Обновление Helm-чарта
helm upgrade $RELEASE_NAME --namespace $NAMESPACE
Удаление Helm-чарта
helm uninstall $RELEASE_NAME --namespace $NAMESPACE
Примеры запросов
Запрос токена JWT у IdP-провайдера Keycloak
TOKEN=$(curl --cacert ca.crt -X POST -d "client_id=demo&client_secret=demo&grant_type=password&username=admin&password=admin" "https://$KEYCLOAK_HOST/auth/realms/demo/protocol/openid-connect/token" | jq -r '.access_token')
Запрос к прикладному веб-сервису снаружи кластера Kubernetes
curl -I -X GET --http1.1 -H "Authorization: Bearer $TOKEN" --cacert ca.crt --cert client.crt --key client.key https://$WEBAPP_HOST/readiness
Запрос к внешнему веб-сервису из кластера Kubernetes
kubectl exec -ti $WEBAPP_POD -- curl -I --http1.1 http://$WEB_HOST:$WEB_PORT
Запрос к внешнему сервису СУБД из кластера Kubernetes (passthrough)
kubectl exec -ti $PSQL_POD -- psql "host=$DB_HOST port=$DB_PORT user=$DB_USER sslrootcert=/certs/ca.crt sslmode=verify-ca"