我来这里是为了寻求澄清,因为在网上似乎找不到。
我有一个捆绑了 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"
在特定资源中使用注释来实现。