我有6个HTTP微服务 . 目前,他们运行疯狂的bash /自定义部署工具设置(dokku,mup) .
我将它们停靠并转移到AWS上的kubernetes(使用kop进行设置) . 最后一块是转换我的nginx配置 .
我想要
-
所有6个都有SSL终止(不在docker镜像中)
-
4需要websockets和客户端IP会话亲和力(Meteor,Socket.io)
-
5需要http-> https转发
-
1在http和https上提供相同的内容
我做了1. SSL终止将服务类型设置为LoadBalancer和using AWS specific annotations . 这创建了AWS负载均衡器,但这似乎是dead end for the other requirements .
我看了Ingress,但是没看到如何在AWS上做到这一点 . 这个Ingress Controller会在AWS上运行吗?
我需要在每个pod中使用nginx控制器吗? This看起来很有趣,但我不确定它是近期/相关的 .
我不确定从哪个方向入手 . 什么会起作用?
麦克风
2 回答
您应该能够使用nginx ingress controller来完成此任务 .
SSL termination
Websocket support
http->https
关闭http-> https重定向,如上面的链接所述
README引导您完成如何设置它,并且有很多examples .
完成这项工作所需的基本部分是:
A default backend,当没有匹配的Ingress规则时,将以404响应
nginx ingress controller将监视您的入口规则,并在它们发生变化时重写/重新加载nginx.conf .
一个或多个描述如何将流量路由到您的服务的ingress rules .
最终结果是您将拥有一个与您的nginx入口控制器服务相对应的ELB,后者又负责根据指定的入口规则路由到您的各个服务 .
There may be a better way to do this. 我写了这个答案是因为我问了这个问题 . 它's the best I could come up with Pixel Elephant' s doc links above .
default-http-backend对于调试非常有用 . 1
入口
这会在节点的IP地址上创建一个 endpoints ,该 endpoints 可能会根据Ingress Container的运行位置而改变
注意底部的configmap . 按环境配置 .
(降价占位符因为没有```)
应用服务和部署
(降价占位符因为没有```)
Ingress Nginx Docker图像
注意底部的default-ssl-certificate
日志记录非常好
-v
注意服务将在AWS上创建一个可用于配置DNS的ELB .
(降价占位符因为没有```)
默认后端(这是从.yaml文件复制/粘贴)
此配置使用三个秘密:
tls-secret - 3个文件:tls.key,tls.crt,dhparam.pem
env-secret - 2个文件:admin.sh和settings.json . Container具有启动脚本来设置环境 .
cloud.docker.com-拉