Как создать HTTPS-маршрут к Сервису, который прослушивает Https с Traefik и Kubernetes - PullRequest
0 голосов
/ 04 мая 2020

Я новичок ie в Куберне и Трафике.

Я прослеживаю этот урок: https://docs.traefik.io/user-guides/crd-acme/

И я изменил его, чтобы использовать мою службу в Scala, что она находится под https и портом 9463. Я пытаюсь развернуть свой сервис Scala с помощью kubernetes и traefik.

Когда я пересылаю прямо в сервис:

kubectl port-forward service/core-service 8001:9463

И я выполняю curl -k 'https://localhost:8001/health':

Я получаю "{Message:Ok}"

Но когда я выполняю переадресацию порта на traefik

kubectl port-forward service/traefik 9463:9463 -n default

и выполняю curl -k 'https://ejemplo.com:9463/tls/health', я получаю "Internal server error"

Я предполагаю, что проблема заключается в том, что мой "основной сервис" прослушивает Протокол HTTPS, вот что я добавляю scheme:https. Я попытался найти решение по документации, но это сбивает с толку.

Это мои файлы yml:

Services.yaml

apiVersion: v1  
kind: Service  
metadata:  
  name: traefik

spec:  
  ports:
    - protocol: TCP
      name: admin
      port: 8080
    - protocol: TCP
      name: websecure
      port: 9463
  selector:
    app: traefik

---
apiVersion: v1  
kind: Service  
metadata:  
  name: core-service

spec:  
  ports:
    - protocol: TCP
      name: websecure
      port: 9463
  selector:
    app: core-service

Deployment.yaml

apiVersion: v1  
kind: ServiceAccount  
metadata:  
  namespace: default
  name: traefik-ingress-controller

---
kind: Deployment  
apiVersion: apps/v1  
metadata:  
  namespace: default
  name: traefik
  labels:
    app: traefik

spec:  
  replicas: 1
  selector:
    matchLabels:
      app: traefik
  template:
    metadata:
      labels:
        app: traefik
    spec:
      serviceAccountName: traefik-ingress-controller
      containers:
        - name: traefik
          image: traefik:v2.0
          args:
            - --api.insecure
            - --accesslog
            - --entrypoints.websecure.Address=:9463
            - --providers.kubernetescrd
            - --certificatesresolvers.default.acme.tlschallenge
            - --certificatesresolvers.default.acme.email=foo@you.com
            - --certificatesresolvers.default.acme.storage=acme.json
            # Please note that this is the staging Let's Encrypt server.
            # Once you get things working, you should remove that whole line altogether.
            - --certificatesresolvers.default.acme.caserver=https://acme-staging-v02.api.letsencrypt.org/directory
          ports:
            - name: websecure
              containerPort: 9463
            - name: admin
              containerPort: 8080

---
kind: Deployment  
apiVersion: apps/v1  
metadata:  
  namespace: default
  name: core-service
  labels:
    app: core-service

spec:  
  replicas: 1
  selector:
    matchLabels:
      app: core-service
  template:
    metadata:
      labels:
        app: core-service
    spec:
      containers:
        - name: core-service
          image: core-service:0.1.4-SNAPSHOT
          ports:
            - name: websecure
              containerPort: 9463
          livenessProbe:
            httpGet:
              port: 9463
              scheme: HTTPS
              path: /health
            initialDelaySeconds: 10

IngressRoute2.yaml

apiVersion: traefik.containo.us/v1alpha1  
kind: IngressRoute  
metadata:  
  name: ingressroutetls
  namespace: default
spec:  
  entryPoints:
    - websecure
  routes:
  - match: Host(`ejemplo.com`) && PathPrefix(`/tls`)
    kind: Rule
    services:
    - name: core-service
      port: 9463
      scheme: https
  tls:
    certResolver: default

1 Ответ

2 голосов
/ 04 мая 2020

Из документов

Маршрутизатор TLS прервет соединение TLS по умолчанию. Тем не менее, параметр passthrough может быть указан для установки того, должны ли запросы пересылаться «как есть», сохраняя все данные в зашифрованном виде.

В вашем случае необходимо включить SSL Passthrough, поскольку модуль ожидает HTTPS траффи c.

apiVersion: traefik.containo.us/v1alpha1  
kind: IngressRoute  
metadata:  
  name: ingressroutetls
  namespace: default
spec:  
  entryPoints:
    - websecure
  routes:
  - match: Host(`ejemplo.com`) && PathPrefix(`/tls`)
    kind: Rule
    services:
    - name: core-service
      port: 9463
      scheme: https
  tls:
    certResolver: default
    passthrough: true
...