Я использую traefik в качестве входного контроллера в кластере K8s.Я хотел бы обеспечить весь трафик через HTTPS.
Это немного сбивает с толку документацию, потому что, очевидно, есть разные способы сделать то же самое?А именно, я хотел бы знать, в чем разница между этими 2:
Если я использую K8sдостаточно использовать общие аннотации или мне еще нужно отредактировать файл TOML?
Я пытался использовать traefik.ingress.kubernetes.io/redirect-entry-point: https
, но не нашел службы, поэтому, по-моему, чего-то не хватает в моей конфигурации.
Если я удаляю приведенную выше строку, то все работает, но HTTP ->HTTPS, конечно, не работает.Когда я помещаю строку назад, она возвращает 404.
FWIW, определение входа следующее (с перенаправлением traefik на 404):
- apiVersion: extensions/v1beta1
kind: Ingress
metadata:
generation: 1
name: rekover-ingress
namespace: prod
annotations:
kubernetes.io/ingress.class: traefik
traefik.ingress.kubernetes.io/frontend-entry-points: http, https
traefik.ingress.kubernetes.io/redirect-entry-point: https
spec:
rules:
- host: www.xxx.com
http:
paths:
- backend:
serviceName: xxx-frontend
servicePort: 80
Я пробовал ту же самую конфигурацию сnginx и переходя на соответствующие метаданные и работали!Ниже приведены метаданные, используемые для nginx и Ingress:
nginx.ingress.kubernetes.io/force-ssl-redirect: "true"
kubernetes.io/ingress.class: nginx
Для полноты я скопировал и вставил определение сервиса для nginx и traefik.Первый работает как положено:
kind: Service
apiVersion: v1
metadata:
name: ingress-nginx
namespace: ingress-nginx
labels:
app.kubernetes.io/name: ingress-nginx
app.kubernetes.io/part-of: ingress-nginx
annotations:
service.beta.kubernetes.io/aws-load-balancer-backend-protocol: http
service.beta.kubernetes.io/aws-load-balancer-ssl-cert: arn:aws:acm:xxxx
service.beta.kubernetes.io/aws-load-balancer-ssl-ports: https
spec:
selector:
app.kubernetes.io/name: ingress-nginx
app.kubernetes.io/part-of: ingress-nginx
ports:
- name: http
port: 80
targetPort: http
- name: https
port: 443
targetPort: http
type: LoadBalancer
</code>
<code>
kind: Service
apiVersion: v1
metadata:
name: traefik-ingress-service
namespace: ingress-prod
annotations:
service.beta.kubernetes.io/aws-load-balancer-backend-protocol: http
service.beta.kubernetes.io/aws-load-balancer-ssl-cert: arn:aws:acm:xxxx
service.beta.kubernetes.io/aws-load-balancer-ssl-ports: https
spec:
selector:
k8s-app: traefik-ingress-lb
ports:
- name: http
port: 80
targetPort: http
protocol: TCP
- name: https
port: 443
targetPort: http
protocol: TCP
type: LoadBalancer