我的nginx pod具有以下配置(此处部分显示):
upstream something-1-8080 {
server something-1.namespace:8080;
}
upstream something-2-8080 {
server something-2.namespace:8080;
}
server {
proxy_buffering off;
proxy_redirect off;
proxy_set_header X-Real-IP $remote_addr;
access_log /dev/stdout timed_combined;
listen 443 ssl http2;
server_name some.server.net;
location /api/v1/something1 {
rewrite ^/api/v1/something1/(.*)$ /$1 break;
rewrite ^/api/v1/something1(.*)$ /$1 break;
proxy_pass http://something-1-8080;
}
location /api/v1/something2 {
rewrite ^/api/v1/something2/(.*)$ /$1 break;
rewrite ^/api/v1/something2(.*)$ /$1 break;
proxy_pass http://something-2-8080;
}
location / {
proxy_pass http://some.nice.server.com;
}
ssl_certificate /etc/nginx/secret/tls.crt;
ssl_certificate_key /etc/nginx/secret/tls.key;
}
我想将我的Nginx配置转换为kubernetes ingress-nginx(入口资源)。 有没有一种使用kubernetes Ingress资源来实现此配置的方法?在阅读ingress-nginx文档时,我还没有找到如何将proxy_pass或多个重写映射到Ingress资源的方法。我希望参考一些详细的文档或具有类似配置的示例。
答案 0 :(得分:1)
此示例可能无法完全像您的nginx.conf一样完成所有操作,它仅将通信路由到URL缩短的正确后端(Kubernetes服务):
例如:
from: http://some.nice.server.com/api/v1/something1/blabla
to: http://some.nice.server.com/blabla
您可能需要根据需要使用ingress annotations对其进行一些调整:
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: some-nice-server
annotations:
kubernetes.io/ingress.class: nginx
nginx.ingress.kubernetes.io/ssl-redirect: "false"
nginx.ingress.kubernetes.io/rewrite-target: /$1
spec:
tls:
- hosts:
- "some.nice.server.com"
secretName: some.nice.server.com
rules:
- host: "some.nice.server.com"
http:
paths:
- path: /something1/?(.*)
backend:
serviceName: something-1
servicePort: 8080
- path: /something2/?(.*)
backend:
serviceName: something-2
servicePort: 8080
您可以找到指南,了解如何使用您的站点证书here手动创建Kubernetes Secret或为此目的如何使用LetsEncrypt服务here
答案 1 :(得分:0)
文档为部署Ingress-nginx入口控制器指定的Ingress-nginx mandatory.yaml
文件在默认的nginx-configuration
中使用默认名称ingress-nginx
设置了一个k8s ConfigMap。命名空间。请参阅deployment documentation中指向强制文件的链接。
然后,要配置您的nginx conf文件,您只需将键值对添加到nginx-configuration
ConfigMap中。可用的设置及其键在ConfigMaps上的ingress-nginx文档中。我发现它们与nginx配置名称略有不同。
这是一个ConfigMap.yaml示例文件,其中包含我为控制器进行的一些设置。
kind: ConfigMap
apiVersion: v1
metadata:
name: nginx-configuration
namespace: ingress-nginx
labels:
app.kubernetes.io/name: ingress-nginx
app.kubernetes.io/part-of: ingress-nginx
data:
# This tells the nginx config to look at a different ConfigMap named custom-headers if you have a lot of headers you want to set
proxy-set-headers: "ingress-nginx/custom-headers"
# Suggested changes for interacting with Cloud service load balancing
proxy-read-timeout: "660"
proxy-send-timeout: "660"
# Custom code that can be referenced
http-snippet: "map $http_upgrade $connection_upgrade {
default 'upgrade';
'' close;
}"
proxy-body-size: "500m"
发布ConfigMap时,ingress-nginx足够聪明,可以在不停机的情况下即时进行自我更新。您应该看到日志中记录的更改。
最后,最好通过查看动态生成的nginx.conf文件来检查配置设置是否处于活动状态。我喜欢用kubectl plugin described in the documentation来做到这一点。