k8s-ingress для защиты приложения с помощью https - PullRequest
0 голосов
/ 02 марта 2019

У меня есть k8s приложение (веб-интерфейс), которое впервые было открыто через NodePort (я использовал переадресацию портов, чтобы запустить его, и оно работает как положено)

запустите его как localhost:8080/api/v1/users

Чем я создал service с типом LoadBalancer, чтобы выставить его наружу, что работает как положено .

например, http://myhost:8080/api/v1/users

apiVersion: v1
kind: Service
metadata:
  name: fzr
  labels:
    app: fzr
    tier: service
spec:
  type: LoadBalancer
  ports:
    - port: 8080
  selector:
    app: fzr

Теперь нам нужно сделать это secure, и после прочтения этой темы мы решили использовать ingress .

Это то, что я сделал

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: ctr-ingress
  selector:
    app: fzr
spec:
  ports:
    - name: https
      port: 443
      targetPort: https

Теперь я хочу запустить его как

https://myhost:443/api/v1/users

Это не работает , я не могу запустить приложение с портом 443 как https, пожалуйста, совет?

1 Ответ

0 голосов
/ 04 марта 2019

Мне кажется, вы используете шаблон yaml для службы типов для развертывания входа, но не правильно.targetPort должен быть числовым портом, и в любом случае я не думаю, что «https» является правильным значением (хотя я могу ошибаться).

Примерно так:

apiVersion: v1
kind: Service
type: NodePort
metadata:
  name: fzr-ingress
spec:
  type: NodePort
  selector:
    app: fzr
  ports:
  - protocol: TCP
    port: 443
    targetPort: 8080

Теперь у вас есть служба нодпорта, которая прослушивает 443 и перенаправляет трафик на ваши модули fzr, прослушивающие порт 8080.

ОднакоФакт, что вы слушаете порт 443, не делает ничего для защиты вашего приложения.Для шифрования трафика вам необходим сертификат TLS, который вы должны сделать доступным для входа как secret.

Если это кажется несколько сложным (потому что это так), вы можете посмотреть развертывание входа Nginx с диаграммы руля

В любом случае ваш входящий yaml будет выглядеть примерно такэто:

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  annotations:
    kubernetes.io/ingress.class: nginx
  name: gcs-ingress
  namespace: default
spec:
  rules:
  - host: myhost
    http:
      paths:
      - backend:
          serviceName: fzr
          servicePort: 443
        path: /api/v1/users
  tls:
  - hosts:
    - myhost
    secretName: myhosts-tls

Подробнее о том, как настроить это здесь

...