Это выглядит как плохая практика (завершение tls для входящих запросов, в то время как исходящие запросы все еще находятся в обычном http). Пожалуйста, обратите внимание на использование типа службы: ExternlName - в ссылках ниже - для связи внутренних служб с внешними службами), однако:
- Предполагается, что вы используете nginx -ingress контроллер поддерживается сообществом kubernetes .
- для службы тип: ExternalName служба DNS кластера возвращает запись CNAME со значением, указанным в spe c .externalName . В вашем примере указанные порты не будут иметь эффекта :
spec:
externalName: main.mycluster.ml
ports:
- port: 443
protocol: TCP
targetPort: 80
- Пример использования типа сервиса: externalName. Обратите внимание на spe c .tls part :
apiVersion: v1
kind: Service
metadata:
name: example
spec:
type: ExternalName
externalName: example.com
---
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
name: example
annotations:
kubernetes.io/ingress.class: "nginx"
nginx.ingress.kubernetes.io/upstream-vhost: example.com # add custom your upstream host
spec:
rules:
- host: xxx.xx
http:
paths:
- backend:
serviceName: example
servicePort: 80
path: /
tls: # missing tls part
- hosts:
- xxx.xx
secretName: api-cert
В этом примере по умолчанию контроллер перенаправляет на HTTPS , если TLS включен для этого входа
В конфигурации контроллера по умолчанию этот параметр выглядит следующим образом: nginx.ingress.kubernetes.io/ssl-redirect: "true"
Дополнительная информация:
openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout ${KEY_FILE} -out ${CERT_FILE} -subj "/CN=${HOST}/O=${HOST}"
- Создание кубернетов tls secret
kubectl create secret tls api-cert --key ${KEY_FILE} --cert ${CERT_FILE}
- Сконфигурируйте входной ресурс с разделом spe c .tls (секрет хоста и tls)
Имейте в виду, что при использовании службы kubernetes тип: ExternalName с ingress servicePort: 443 попытается связаться с вашим внешним доменом через порт 443 и (если внешняя служба прослушивает порт 80, это решение не будет работать).
В качестве обходного пути вы можете использовать Сервис без селектора:
kind: Service
apiVersion: v1
metadata:
name: example2
spec:
ports:
- port: 443
targetPort: 80
---
kind: Endpoints
apiVersion: v1
metadata:
name: example2
subsets:
- addresses:
- ip: 93.184.216.34
ports:
- port: 80
---
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
name: example
annotations:
kubernetes.io/ingress.class: "nginx"
nginx.ingress.kubernetes.io/upstream-vhost: example.com # add custom your upstream host
spec:
rules:
- host: xxx.xx
http:
paths:
- backend:
serviceName: example2
servicePort: 443
path: /
tls:
- hosts:
- xxx.xx
secretName: api-cert
Использовать kubectl describe ingress <your_ingress>
взять Посмотрите на исходящий backend_service с примененным портом.
Rules:
Host Path Backends
---- ---- --------
xxx.xx
/ example2:443 (93.184.216.34:80)
Надеюсь, эта помощь