Показаны различия между двумя версиями страницы.
Предыдущая версия справа и слева Предыдущая версия Следующая версия | Предыдущая версия | ||
k8s:nets [2024/09/08 06:39] admin |
k8s:nets [2024/11/10 13:15] (текущий) admin |
||
---|---|---|---|
Строка 294: | Строка 294: | ||
number: 80 | number: 80 | ||
</ | </ | ||
+ | </ | ||
+ | |||
+ | |||
+ | < | ||
+ | < | ||
+ | " | ||
+ | **ssl-redirect** - принудительное использование HTTPS на стороне сервера, | ||
+ | **force-ssl-redirect** - принудительно перенаправлять на HTTPS, даже если TLS недоступен.\\ | ||
+ | |||
+ | **ssl-passthrough** - передача данных по протоколу SSL. Указание контроллеру отправлять соединения по протоколу TLS непосредственно на серверную часть, вместо того чтобы позволять Nginx расшифровывать обмен данными\\ | ||
+ | :!: т.к. передача по протоколу SSL работает на уровне 4 модели OSI (TCP), а не на 7 (HTTP), то эта аннотация **делает недействительными** все остальные аннотации для входящего объекта\\ | ||
+ | :!: В том числе и маршрутизация на основе пути (т.е. Location фактически не работает, | ||
+ | |||
+ | Блок " | ||
+ | |||
+ | **** - | ||
+ | |||
+ | **** - | ||
</ | </ | ||
Строка 320: | Строка 338: | ||
:!: Терминирование TLS: если IC настроен на обработку HTTPS, он выполняет терминирование, | :!: Терминирование TLS: если IC настроен на обработку HTTPS, он выполняет терминирование, | ||
</ | </ | ||
+ | |||
+ | |||
+ | |||
+ | |||
+ | === HTTPS Ingress === | ||
+ | Ресурс Ingress поддерживает только один порт TLS, 443, и предполагает завершение TLS в точке входа (трафик к Службе и ее Pods передается в виде открытого текста).\\ | ||
+ | Ссылка на этот секрет в Ingress сообщает контроллеру Ingress о необходимости защитить канал от клиента до балансировщика нагрузки с помощью TLS\\ | ||
+ | <code yaml> | ||
+ | spec: | ||
+ | tls: | ||
+ | - hosts: | ||
+ | - https-example.foo.com | ||
+ | secretName: testsecret-tls | ||
+ | </ | ||
+ | |||
+ | |||
+ | :!: Важно не забывать что серт должен быть валидным, | ||
+ | |||
+ | |||
+ | Для того чтобы использовать сертификаты в конфигурации Ingress, их нужно загрузить в кластер Kubernetes. Серты хранятся в секретах Кубера, | ||
+ | <code bash> | ||
+ | kubectl create secret tls my-tls --key my-tls.key --cert my-tls.cert | ||
+ | </ | ||
< | < | ||
- | < | + | < |
+ | <code yaml> | ||
+ | apiVersion: extensions/ | ||
+ | kind: Ingress | ||
+ | | ||
+ | name: ingress-my-tls | ||
+ | | ||
+ | | ||
+ | - hosts: | ||
+ | - ingress.example.com | ||
+ | | ||
+ | | ||
+ | - host: ingress.example.com | ||
+ | | ||
+ | | ||
+ | - path: / | ||
+ | | ||
+ | | ||
+ | | ||
+ | </ | ||
+ | </ | ||
+ | |||
+ | |||
+ | < | ||
+ | < | ||
<code yaml> | <code yaml> | ||
apiVersion: networking.k8s.io/ | apiVersion: networking.k8s.io/ | ||
kind: Ingress | kind: Ingress | ||
metadata: | metadata: | ||
+ | name: myapp-ing | ||
annotations: | annotations: | ||
- | # kubernetes.io/ | + | |
- | # | + | |
+ | |||
+ | | ||
nginx.ingress.kubernetes.io/ | nginx.ingress.kubernetes.io/ | ||
- | name: ingress-my-service | + | |
- | | + | |
+ | app: myapp | ||
spec: | spec: | ||
- | ingressClassName: | ||
rules: | rules: | ||
- | - host: < | + | - host: " |
http: | http: | ||
paths: | paths: | ||
Строка 344: | Строка 413: | ||
backend: | backend: | ||
service: | service: | ||
- | name: my-service | + | name: myapp-svc |
port: | port: | ||
- | number: | + | number: |
</ | </ | ||
</ | </ | ||
Строка 354: | Строка 423: | ||
< | < | ||
- | < | + | < |
+ | [[https:// | ||
+ | [[https:// | ||
+ | " | ||
+ | Суть в том что в кластер устанавливается объект " | ||
+ | В манифесте Ingress, в блоке " | ||
+ | |||
+ | Пример конфига ingress | ||
<code yaml> | <code yaml> | ||
+ | apiVersion: networking.k8s.io/ | ||
+ | kind: Ingress | ||
+ | metadata: | ||
+ | name: ingress-test-site | ||
+ | namespace: test-ingress-app | ||
+ | annotations: | ||
+ | cert-manager.io/ | ||
+ | spec: | ||
+ | ingressClassName: | ||
+ | rules: | ||
+ | - host: es.moysite.ru | ||
+ | http: | ||
+ | paths: | ||
+ | - path: / | ||
+ | pathType: Prefix | ||
+ | backend: | ||
+ | service: | ||
+ | name: spa | ||
+ | port: | ||
+ | number: 80 | ||
+ | - path: /test | ||
+ | pathType: Prefix | ||
+ | backend: | ||
+ | service: | ||
+ | name: frontend-api | ||
+ | port: | ||
+ | number: 80 | ||
+ | tls: | ||
+ | - hosts: | ||
+ | - es.moysite.ru | ||
+ | secretName: test-ingress-app-production | ||
+ | </ | ||
+ | Еще пример | ||
+ | <code yaml> | ||
+ | apiVersion: extensions/ | ||
+ | kind: Ingress | ||
+ | metadata: | ||
+ | name: ingress-socks-tls | ||
+ | annotations: | ||
+ | kubernetes.io/ | ||
+ | cert-manager.io/ | ||
+ | spec: | ||
+ | rules: | ||
+ | - host: kuber.zeroxzed.ru | ||
+ | http: | ||
+ | paths: | ||
+ | - backend: | ||
+ | serviceName: | ||
+ | servicePort: | ||
+ | tls: | ||
+ | - hosts: | ||
+ | - kuber.zeroxzed.ru | ||
+ | secretName: socks-tls-2 | ||
</ | </ | ||
</ | </ | ||
Строка 365: | Строка 494: | ||
+ | < | ||
+ | < | ||
+ | [[https:// | ||
+ | Конфигурация с расшифровкой TLS на Ingress контроллере | ||
+ | <code yaml> | ||
+ | apiVersion: networking.k8s.io/ | ||
+ | kind: Ingress | ||
+ | metadata: | ||
+ | name: ingress-name | ||
+ | namespace: namespace-name | ||
+ | annotations: | ||
+ | # это хз, возможно не обязательно | ||
+ | nginx.ingress.kubernetes.io/ | ||
+ | spec: | ||
+ | # блок, задающий терминацию на ингрессе, | ||
+ | tls: | ||
+ | - hosts: | ||
+ | - app.myorg.com | ||
+ | secretName: tls-secret | ||
+ | rules: | ||
+ | - http: | ||
+ | paths: | ||
+ | - backend: | ||
+ | serviceName: | ||
+ | servicePort: | ||
+ | path: /carbon | ||
+ | - backend: | ||
+ | serviceName: | ||
+ | servicePort: | ||
+ | path: /oauth | ||
+ | </ | ||
+ | |||
+ | |||
+ | тоже самое, только пересылка шифрованного трафика, | ||
+ | <code yaml> | ||
+ | apiVersion: networking.k8s.io/ | ||
+ | kind: Ingress | ||
+ | metadata: | ||
+ | name: ingress-name | ||
+ | namespace: namespace-name | ||
+ | annotations: | ||
+ | nginx.ingress.kubernetes.io/ | ||
+ | spec: | ||
+ | rules: | ||
+ | - http: | ||
+ | paths: | ||
+ | - backend: | ||
+ | serviceName: | ||
+ | servicePort: | ||
+ | path: /carbon | ||
+ | - backend: | ||
+ | serviceName: | ||
+ | servicePort: | ||
+ | path: /oauth | ||
+ | </ | ||
+ | </ | ||
+ | |||
+ | |||
+ | |||
+ | |||
+ | < | ||
+ | < | ||
+ | |||
+ | |||
+ | <code yaml> | ||
+ | |||
+ | </ | ||
+ | </ | ||