Использовать протокол https для конечных точек в службах Kubernetes

#kubernetes #kubectl #kubernetes-pod #azure-aks #kubernetes-service

#kubernetes #kubectl #kubernetes-pod #azure-aks #kubernetes-сервис

Вопрос:

Пытался создать службу конечных точек Kubernetes для вызова ресурса, размещенного вне кластера, через статические IP-адреса по протоколу HTTPS. Ниже приведен код конечной точки

 kind: Service
apiVersion: v1
metadata:
  name: serviceRequest
spec:
  ports:
    - port: 8081
      targetPort: 8094      
      
---
kind: Endpoints
apiVersion: v1
metadata:
  name: serviceRequest
subsets:
  - addresses:
      - ip: XX.XX.XX.XX // **external IP which is accessible as https://XX.XX.XX.XX:8094**
    ports:
      - port: 8094
 

Но приведенная выше конфигурация выдает 400 неверных запросов с сообщением «Для этой комбинации хоста и порта требуется протокол TLS».

То же самое работает для http, а не для открытого https «ip».Не мог бы кто-нибудь подсказать, как этого добиться.

##Update1 Вот как настроен поток. Вход-> сервис-> конечные точки

Комментарии:

1. ваша конечная точка не содержит определений для сертификата TLS. конечная точка довольно грубая, вам, вероятно, лучше выбрать входной контроллер. ( docs.microsoft.com/en-us/azure/aks/ingress-basic )

2. У @sleepyhead уже есть настройка входа перед моим уровнем обслуживания, и я не хочу раскрывать общедоступную службу, которая имеет кластерный тип, и то же самое относится и к конечным точкам. Не могли бы вы помочь с некоторыми подробностями об этом. Я немного новичок в этой концепции. Я обновил поток в post.

Ответ №1:

Это сообщение об ошибке, которое вы получаете при вызове https конечной http точки. Вы уверены, что тот, кто вызывает вашу службу, вызывает ее с помощью https:// в начале?

Комментарии:

1. да, с конфигурацией, о которой я упоминал выше, она делает http://. Но мой ресурс находится на https: // Ищу руководство, как мы можем заставить службу использовать https: // для внешних конечных точек IP.

2. Итак, вы хотите вызвать свою службу с помощью http, но перенаправить ее как https. Я боюсь, что это выходит за рамки функциональности службы k8s. Для этого вам нужно будет использовать сервисную сетку, такую как Isio: istio.io/latest/docs/tasks/traffic-management/egress /…

Ответ №2:

Служба Kubernetes — это не более чем набор правил пересылки iptables (чаще всего), и она ничего не знает о TLS.
Если вы хотите принудительно https перенаправить, вы можете использовать ingress controller для этого. Все основные входные контроллеры имеют эту возможность.

Например, проверьте nginx-ingress .
https://kubernetes.github.io/ingress-nginx/user-guide/nginx-configuration/annotations/#server-side-https-enforcement-through-redirect.

По сути, все, что вам нужно, это добавить эту аннотацию в ваше правило входа.
nginx.ingress.kubernetes.io/ssl-redirect: "true"

Ответ №3:

Просто добавьте порт 443 в службу, которая будет отправлять запрос TLS / https:

 kind: Service
apiVersion: v1
metadata:
  name: serviceRequest
spec:
  ports:
    - port: 443 # <-- this is the way
      targetPort: 8094      
      
---
kind: Endpoints
apiVersion: v1
metadata:
  name: serviceRequest
subsets:
  - addresses:
      - ip: XX.XX.XX.XX # **external IP which is accessible as https://XX.XX.XX.XX:8094**
    ports:
      - port: 8094
 

Таким образом, вы можете получить доступ к вашему ServiceRequest из ваших контейнеров на https://serviceRequest url-адрес.

Также имейте в виду, что в yaml символ # является комментарием, а не //