我已经配置了我的入口支持SSL:
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: "service"
annotations:
nginx.ingress.kubernetes.io/whitelist-source-range: "x.x.x.x/xx"
nginx.ingress.kubernetes.io/ssl-redirect: "false"
spec:
tls:
- hosts:
- "example.com"
secretName: example.name
rules:
- host: "example.com"
http:
paths:
- path: /
backend:
serviceName: service
servicePort: 80
在上述配置中,只有白名单中的IP才能访问HTTP和HTTPS的域。但是我想配置所有IP地址可以访问https://example.com
(HTTPS),白名单中的某些IP地址可以不使用SSL-http://example.com
访问。
答案 0 :(得分:1)
我已经解决了问题,方法是使用dict[ID]
批注将更多配置添加到nginx位置(同时监听http和https)。
nginx.ingress.kubernetes.io/configuration-snippet
答案 1 :(得分:0)
whitelist-source-range
注释将始终影响整个Ingress资源。但是,您可能(未测试!)请尝试使用两个单独的Ingress资源:一个用于HTTP访问(具有源白名单且没有tls
配置)和一个用于HTTPS(已禁用纯HTTP)使用kubernetes.io/ingress.allow-http
注释):
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: service-https
annotations:
nginx.ingress.kubernetes.io/ssl-redirect: "false"
kubernetes.io/ingress.allow-http: "false"
spec:
tls:
- hosts:
- "example.com"
secretName: example.name
rules:
- host: "example.com"
http:
paths:
- path: /
backend:
serviceName: service
servicePort: 80
---
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: service-http
annotations:
nginx.ingress.kubernetes.io/whitelist-source-range: "x.x.x.x/xx"
spec:
rules:
- host: "example.com"
http:
paths:
- path: /
backend:
serviceName: service
servicePort: 80
答案 2 :(得分:0)
我相信目前仅使用nginx-ingress是不可能的。
当您为Ingress设置HTTPS方案时,它开始侦听端口443和continues to listen on port 80。
但是,您可以通过使用本地Nginx实例作为外部负载均衡器来做到这一点。
请点击此链接以获取详细说明:"Kubernetes TCP load balancer service on premise (non-cloud)"
作为另一种选择,您可能要尝试Istio Ingress