Инструменты пользователя

Инструменты сайта


k8s:nets

Различия

Показаны различия между двумя версиями страницы.

Ссылка на это сравнение

Предыдущая версия справа и слева Предыдущая версия
Следующая версия
Предыдущая версия
k8s:nets [2024/09/08 06:39]
admin
k8s:nets [2024/11/10 13:15] (текущий)
admin
Строка 294: Строка 294:
               number: 80               number: 80
 </code> </code>
 +</details>
 +
 +
 +<details>
 +<summary>:!: Annotations</summary>
 +"nginx.ingress.kubernetes.io/":\\
 +**ssl-redirect** - принудительное использование HTTPS на стороне сервера, с помощью перенаправления. По умолчанию контроллер перенаправляет на HTTPS если для этого входа включен TLS\\
 +**force-ssl-redirect** - принудительно перенаправлять на HTTPS, даже если TLS недоступен.\\
 +
 +**ssl-passthrough** - передача данных по протоколу SSL. Указание контроллеру отправлять соединения по протоколу TLS непосредственно на серверную часть, вместо того чтобы позволять Nginx расшифровывать обмен данными\\
 +:!: т.к. передача по протоколу SSL работает на уровне 4 модели OSI (TCP), а не на 7 (HTTP), то эта аннотация **делает недействительными** все остальные аннотации для входящего объекта\\
 +:!: В том числе и маршрутизация на основе пути (т.е. Location фактически не работает, тк путь зашифрован)\\
 +
 +Блок "TLS" вероятно по этой же причине не работает, тк подставляется дефолтный сертификат кубера 
 +
 +**** - 
 +
 +**** - 
 </details> </details>
  
Строка 320: Строка 338:
 :!: Терминирование TLS: если IC настроен на обработку HTTPS, он выполняет терминирование, те расшифровку входящего трафика и пересылку его во внутреннюю службу уже по нешифрованному соединению\\ :!: Терминирование TLS: если IC настроен на обработку HTTPS, он выполняет терминирование, те расшифровку входящего трафика и пересылку его во внутреннюю службу уже по нешифрованному соединению\\
 </details> </details>
 +
 +
 +
 +
 +=== HTTPS Ingress ===
 +Ресурс Ingress поддерживает только один порт TLS, 443, и предполагает завершение TLS в точке входа (трафик к Службе и ее Pods передается в виде открытого текста).\\
 +Ссылка на этот секрет в Ingress сообщает контроллеру Ingress о необходимости защитить канал от клиента до балансировщика нагрузки с помощью TLS\\
 +<code yaml>
 +spec:
 +  tls:
 +  - hosts:
 +      - https-example.foo.com
 +    secretName: testsecret-tls
 +</code>
 +
 +
 +:!: Важно не забывать что серт должен быть валидным, для этого URL\\
 +
 +
 +Для того чтобы использовать сертификаты в конфигурации Ingress, их нужно загрузить в кластер Kubernetes. Серты хранятся в секретах Кубера, Создать такой секрет можно следующим образом:\\
 +<code bash>
 +kubectl create secret tls my-tls --key my-tls.key --cert my-tls.cert
 +</code>
  
  
 <details> <details>
-<summary>:!: Еще пример</summary>+<summary>:!: Далее этот серт можно использовать в конфигурации Ingress</summary> 
 +<code yaml> 
 +apiVersion: extensions/v1beta1 
 + kind: Ingress 
 + metadata: 
 +   name: ingress-my-tls 
 + spec: 
 +   tls: 
 +   - hosts: 
 +     - ingress.example.com 
 +     secretName: my-tls 
 +   rules: 
 +   - host: ingress.example.com 
 +     http: 
 +       paths: 
 +       - path: / 
 +         backend: 
 +           serviceName: nginx 
 +           servicePort: 80 
 +</code> 
 +</details> 
 + 
 + 
 +<details> 
 +<summary>:!: Пересылка шифрованного трафика через Ingress</summary> 
 <code yaml> <code yaml>
 apiVersion: networking.k8s.io/v1 apiVersion: networking.k8s.io/v1
 kind: Ingress kind: Ingress
 metadata: metadata:
 +  name: myapp-ing
   annotations:   annotations:
-#    kubernetes.io/ingress.class: nginx +    указывает на использование nginx, зависит от настроек контроллера видимо 
-   nginx.ingress.kubernetes.io/force-ssl-redirect: 'true'+    kubernetes.io/ingress.class: nginx 
 +     
 +    Указываем контроллеру пересылать шифрованный трафик дальше, в приложение
     nginx.ingress.kubernetes.io/ssl-passthrough: 'true'     nginx.ingress.kubernetes.io/ssl-passthrough: 'true'
-  name: ingress-my-service + 
-  namespacemy-namespace+  labels: 
 +    appmyapp
 spec: spec:
-  ingressClassName: nginx 
   rules:   rules:
-    - host: <my-service>.<url кластера>+    - host: "myapp.apps.url-cluster.ru"
       http:       http:
         paths:         paths:
Строка 344: Строка 413:
             backend:             backend:
               service:               service:
-                name: my-service+                name: myapp-svc
                 port:                 port:
-                  number: 3000+                  number: 9444
 </code> </code>
 </details> </details>
Строка 354: Строка 423:
  
 <details> <details>
-<summary>:!: </summary>+<summary>:!: Вариант с Lets Encrypt</summary> 
 +[[https://habr.com/ru/articles/668098|Есть статья по этому поводу]]\\ 
 +[[https://serveradmin.ru/kubernetes-ingress|Еще статья]]\\ 
 +"Cert-manager" - утилита в кластере Кубера, которая умеет автоматически полуать и продлевать сертификаты, в том числе и от бесплатного "Lets Encrypt"\\
  
  
 +Суть в том что в кластер устанавливается объект "cert-manager", типа "issuer", он занимается выпуском/перевыпуском сертов\\
 +В манифесте Ingress, в блоке "tls", указывается этот объект, точнее секрет, куда эмитент сохраняет серт\\ 
 +
 +Пример конфига ingress
 <code yaml> <code yaml>
 +apiVersion: networking.k8s.io/v1
 +kind: Ingress
 +metadata:
 +  name: ingress-test-site
 +  namespace: test-ingress-app
 +  annotations:
 +    cert-manager.io/issuer: letsencrypt-production
 +spec:
 +  ingressClassName: nginx
 +  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>
  
 +Еще пример
 +<code yaml>
 +apiVersion: extensions/v1beta1
 +kind: Ingress
 +metadata:
 +  name: ingress-socks-tls
 +  annotations:
 +    kubernetes.io/ingress.class: "nginx"
 +    cert-manager.io/cluster-issuer: "letsencrypt"
 +spec:
 +  rules:
 +  - host: kuber.zeroxzed.ru
 +    http:
 +      paths:
 +      - backend:
 +          serviceName: front-end
 +          servicePort: 80
 +  tls:
 +  - hosts:
 +    - kuber.zeroxzed.ru
 +    secretName: socks-tls-2
 </code> </code>
 </details> </details>
Строка 365: Строка 494:
  
  
 +<details>
 +<summary>:!: Еще про TLS</summary>
 +[[https://stackoverflow-com.translate.goog/questions/54459015/how-to-configure-ingress-to-direct-traffic-to-an-https-backend-using-https?_x_tr_sl=en&_x_tr_tl=ru&_x_tr_hl=ru&_x_tr_pto=sc|Хорошая инфа по этому поводу]]\\
  
 +Конфигурация с расшифровкой TLS на Ingress контроллере 
 +<code yaml>
 +apiVersion: networking.k8s.io/v1
 +kind: Ingress
 +metadata:
 +  name: ingress-name
 +  namespace: namespace-name 
 +  annotations:
 +    # это хз, возможно не обязательно
 +    nginx.ingress.kubernetes.io/backend-protocol: "HTTPS"
 +spec:
 +  # блок, задающий терминацию на ингрессе, далее трафик не шифрованный, внутри кластера
 +  tls:
 +  - hosts:
 +    - app.myorg.com
 +    secretName: tls-secret 
 +  rules:
 +  - http:
 +      paths:
 +      - backend:
 +          serviceName: service
 +          servicePort: 9443
 +        path: /carbon
 +      - backend:
 +          serviceName: service2
 +          servicePort: 9443
 +        path: /oauth
 +</code>
 +
 +
 +тоже самое, только пересылка шифрованного трафика, расшифровка в приложении
 +<code yaml>
 +apiVersion: networking.k8s.io/v1
 +kind: Ingress
 +metadata:
 +  name: ingress-name
 +  namespace: namespace-name 
 +  annotations:
 +    nginx.ingress.kubernetes.io/ssl-passthrough: "true"
 +spec:
 +  rules:
 +  - http:
 +      paths:
 +      - backend:
 +          serviceName: service
 +          servicePort: 9443
 +        path: /carbon
 +      - backend:
 +          serviceName: service2
 +          servicePort: 9443
 +        path: /oauth
 +</code>
 +</details>
 +
 +
 +
 +
 +<details>
 +<summary>:!: </summary>
 +
 +
 +<code yaml>
 +
 +</code>
 +</details>
  
  
k8s/nets.1725777580.txt.gz · Последнее изменение: 2024/09/08 06:39 — admin