Lee*_*son 5 nginx kubernetes azure-aks nginx-ingress
我在 Kubernetes 中有一个 nginx 入口,其中既有白名单(由注释处理nginx.ingress.kubernetes.io/whitelist-source-range),也有自定义端口映射(通过配置映射公开 SFTP 服务器端口 22 --tcp-services-configmap)。白名单适用于 80 和 443,但不适用于 22。如何将自定义端口列入白名单?
配置大致如下:
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-ingress-controller
namespace: ingress-nginx
labels:
app.kubernetes.io/name: ingress-nginx
app.kubernetes.io/part-of: ingress-nginx
spec:
...
spec:
serviceAccountName: nginx-ingress-serviceaccount
containers:
- name: nginx-ingress-controller
image: quay.io/kubernetes-ingress-controller/nginx-ingress-controller:0.33.0
args:
- /nginx-ingress-controller
- --configmap=$(POD_NAMESPACE)/nginx-configuration
- --tcp-services-configmap=$(POD_NAMESPACE)/tcp-services
- --udp-services-configmap=$(POD_NAMESPACE)/udp-services
- --publish-service=$(POD_NAMESPACE)/ingress-nginx
- --annotations-prefix=nginx.ingress.kubernetes.io
ports:
- name: http
containerPort: 80
- name: https
containerPort: 443
- name: sftp
containerPort: 22
...
kind: Ingress
metadata:
name: {{ .controllerName }}
annotations:
kubernetes.io/ingress.class: nginx
nginx.ingress.kubernetes.io/whitelist-source-range: {{ .ipAllowList }}
kind: ConfigMap
apiVersion: v1
metadata:
name: tcp-services
namespace: ingress-nginx
labels:
app.kubernetes.io/name: ingress-nginx
app.kubernetes.io/part-of: ingress-nginx
data:
22: "default/sftp:22"
Run Code Online (Sandbox Code Playgroud)
更新
感谢@jordanm,我发现我可以通过loadBalancerSourceRangesLoadBalancer 而不是 nginx 来限制所有端口的 IP 地址:
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
spec:
externalTrafficPolicy: Local
type: LoadBalancer
loadBalancerIP: {{ .loadBalancerIp }}
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: https
- name: sftp
port: 22
targetPort: sftp
loadBalancerSourceRanges:
{{ .ipAllowList }}
Run Code Online (Sandbox Code Playgroud)
首先看一下这个问题:ip-whitelist-support。
IP 未列入 TCP 服务白名单,替代方法是为 TCP 服务创建单独的防火墙,并在防火墙级别将 IP 列入白名单。
对于特定位置{{ $path }} 我们定义了 {{ if isLocationAllowed $location }}。
查看官方 Ingress 文档:ingress-kubernetes。
Ingress 将 HTTP 和 HTTPS 路由从集群外部公开到集群内的服务。流量路由由入口资源上定义的规则控制。
Ingress 不会公开任意端口或协议。将除 HTTP 和 HTTPS 之外的服务公开到 Internet 通常使用 Service.Type=NodePort 或 Service.Type=LoadBalancer 类型的服务。
您必须有一个 Ingress 控制器才能满足 Ingress。仅创建 Ingress 资源是没有效果的。
这种情况下Ingress资源工具ingress-controller如何处理http/https请求。在这种方法中,nginx-ingress 控制器作为软件(引入第 7 层功能/负载平衡)。
如果您对 nginx ingress tcp 支持感兴趣:
Ingress 不支持 TCP 或 UDP 服务。因此,该入口控制器使用标志 --tcp-services-configmap 和 --udp-services-configmap
请参阅:暴露 tcp-udp-服务
如果您想在使用 TCP 服务时检查更精细的配置,您应该考虑使用云提供商提供的 L4 负载平衡/防火墙设置。
| 归档时间: |
|
| 查看次数: |
2360 次 |
| 最近记录: |