具有内部 nginx SSL 重定向的 Kubernetes LoadBalancer

具有内部 nginx SSL 重定向的 Kubernetes LoadBalancer

我来这里是为了寻求澄清,因为在网上似乎找不到。

我有一个捆绑了 PHP-FPM/nginx 的 Dockerimage。

当我访问端口 80 时,它会使用我的证书重定向到 443 - 完美运行,符合预期。

我最近一直在研究 Kubernetes 并了解其基本概念。

我尝试在 Minikube 中启动并运行它,但似乎无法使 SSL 重定向正常工作。

这可能吗?

我是否只需要在我的应用程序中使用端口 80 并在入口级别使用 SSL?

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: laravel-app
spec:
  replicas: 1
  minReadySeconds: 10
  strategy:
    type: RollingUpdate
    rollingUpdate:
      maxUnavailable: 1
      maxSurge: 1
  selector:
    matchLabels:
      app: laravel-app
  template:
    metadata:
      labels:
        app: laravel-app
    spec:
      containers:
        - image: image/laravel-app:latest
          name: laravel-app
          ports:
            - name: 'http'
              containerPort: 80
            - name: 'https'
              containerPort: 443
          envFrom:
            - configMapRef:
                name: laravel-config
---
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: laravel-ingress
  annotations:
    ingress.kubernetes.io/rewrite-target: /
spec:
  rules:
    - host: laravel.localhost
      http:
        paths:
          - path: /
            backend:
              serviceName: laravel-app-service
              servicePort: 80
    - host: laravel.localhost
      http:
        paths:
          - path: /
            backend:
              serviceName: laravel-app-service
              servicePort: 443
---
apiVersion: v1
kind: Service
metadata:
  name: laravel-app-service
spec:
  type: LoadBalancer
  selector:
    app: laravel-app
  ports:
    - port: 80
      name: 'http'
      protocol: TCP
      targetPort: 80
      nodePort: 30080
    - port: 443
      name: 'https'
      protocol: TCP
      targetPort: 443
      nodePort: 30443
---
apiVersion: v1
kind: ConfigMap
metadata:
  name: laravel-config
  labels:
    name: laravel-config
data:
  APP_ENV: "dev"

答案1

您需要使用nginx.ingress.kubernetes.io/force-ssl-redirect: "true"注解:

在集群外使用 SSL 卸载(例如 AWS ELB)时,即使没有可用的 TLS 证书,强制重定向到 HTTPS 也很有用。这可以通过 nginx.ingress.kubernetes.io/force-ssl-redirect: "true"在特定资源中使用注释来实现。

相关内容