kubernetes - Kubernetes EKS 入口和 TLS
问题描述
我正在尝试为应用程序完成一项非常常见的任务:
分配证书并使用 TLS/HTTPS 保护它。
我花了将近一天的时间浏览文档并尝试多种不同的策略来使其正常工作,但没有什么对我有用。
最初,我按照此处的文档使用 Helm 在 EKS 上设置 nginx-ingress:https ://github.com/nginxinc/kubernetes-ingress 。我尝试使用以下配置使示例应用程序正常工作(咖啡馆):
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: cafe-ingress
spec:
tls:
- hosts:
- cafe.example.com
secretName: cafe-secret
rules:
- host: cafe.example.com
http:
paths:
- path: /tea
backend:
serviceName: tea-svc
servicePort: 80
- path: /coffee
backend:
serviceName: coffee-svc
servicePort: 80
入口和所有支持的服务/部署工作正常,但缺少一件主要的事情:入口没有关联的地址/ELB:
NAME HOSTS ADDRESS PORTS AGE
cafe-ingress cafe.example.com 80, 443 12h
Service LoadBalancers 创建 ELB 资源,即:
testnodeapp LoadBalancer 172.20.4.161 a64b46f3588fe... 80:32107/TCP 13h
但是,Ingress 并未创建地址。如何在 EKS 上外部公开 Ingress 控制器以处理 TLS/HTTPS?
解决方案
我已经复制了通过安全入口在 EKS 上启动和运行所需的每一个步骤。我希望这可以帮助其他任何想要在 EKS 上快速安全地获取应用程序的人。
要在 EKS 上启动并运行:
在此处使用 CloudFormation 模板部署 EKS :请记住,我已使用 CidrIp:193.22.12.32/32 限制访问。更改此项以满足您的需要。
安装客户端工具。按照这里的指南。
- 配置客户端。按照这里的指南。
- 启用工作节点。按照这里的指南。
您可以通过运行以下命令验证集群是否已启动并正在运行:
kubectl get svc
现在您使用 nginx 入口启动一个测试应用程序。
注意:所有东西都放在 ingress-nginx 命名空间下。理想情况下,这将被模板化以在不同的名称空间下构建,但就本示例而言,它可以工作。
部署 nginx 入口:
kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/master/deploy/mandatory.yaml
kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/master/deploy/provider/cloud-generic.yaml
从这里获取 rbac.yml 。跑:
kubectl apply -f rbac.yml
准备好证书和密钥以供测试。像这样创建必要的秘密:
kubectl create secret tls cafe-secret --key mycert.key --cert mycert.crt -n ingress-nginx
从这里复制 coffee.yml 。从这里复制 coffee-ingress.yml 。更新您要在其下运行它的域。像这样运行它们
kubectl apply -f coffee.yaml
kubectl apply -f coffee-ingress.yaml
更新您的域的 CNAME 以指向以下地址:
kubectl get ing -n ingress-nginx -o wide
刷新 DNS 缓存并测试域。您应该获得一个包含请求统计信息的安全页面。我已经多次复制了这个,所以如果它对你不起作用,请检查步骤、配置和证书。此外,检查 nginx-ingress-controller* pod 上的日志。
kubectl logs pod/nginx-ingress-controller-*********** -n ingress-nginx
这应该给你一些错误的迹象。
推荐阅读
- dom - 分析脚本未从影子 DOM 发送数据
- r - 使用 BTYD 预测客户下次购买的日期和金额
- python - TypeError: 'numpy.float64' 对象在使用 write.() 时不可迭代
- facebook - 为 facebook 聊天机器人实现切换协议会引发错误
- python - 如何从pdf中提取电子邮件
- angular - 如何使用来自子组件的动态数据用 angular 2 填充表单?
- laravel - 试图在 Laravel 5.5 中对 groupBy 值求和
- spring-boot - springboot + infinispan 失效模式:如何与共享缓存存储一起使用?
- java - 杰克逊日期转换面临问题
- angular - Angular + SCSS:如何在父组件上应用样式:悬停