Kubernetes EKS Ingress和TLS

Ken*_*n J 9 kubernetes amazon-eks

我正在尝试为应用程序完成一项非常常见的任务:

分配证书并使用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
Run Code Online (Sandbox Code Playgroud)

入口和所有支持的服务/部署工作正常,但有一个主要的缺失:入口没有相关的地址/ ELB:

NAME           HOSTS                 ADDRESS   PORTS     AGE
cafe-ingress   cafe.example.com                80, 443   12h
Run Code Online (Sandbox Code Playgroud)

Service LoadBalancers创建ELB资源,即:

testnodeapp    LoadBalancer   172.20.4.161     a64b46f3588fe...   80:32107/TCP     13h
Run Code Online (Sandbox Code Playgroud)

但是,Ingress没有创建地址.如何在EKS上外部暴露出Ingress控制器来处理TLS/HTTPS?

Ken*_*n J 13

我已经通过安全入口复制了在EKS上启动和运行所需的每一步.我希望这可以帮助其他想要快速安全地在EKS上获得应用的人.

要在EKS上启动并运行:

  1. 在此处使用CloudFormation模板部署EKS :请记住,我已使用CidrIp限制访问:193.22.12.32/32.改变它以满足您的需求.

  2. 安装客户端工具.按照这里的指南.

  3. 配置客户端.按照这里的指南.
  4. 启用工作节点.按照这里的指南.

您可以通过运行以下命令验证群集是否已启动并正在运行:

kubectl get svc

现在,您使用nginx入口启动测试应用程序.

注意:所有内容都放在ingress-nginx名称空间下.理想情况下,这将模仿在不同的命名空间下构建,但出于本示例的目的,它可以工作.

部署nginx-ingress:

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
Run Code Online (Sandbox Code Playgroud)

这里获取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
Run Code Online (Sandbox Code Playgroud)

更新您域名的CNAME以指向ADDRESS:

kubectl get ing -n ingress-nginx -o wide

刷新DNS缓存并测试域.你应该得到一个包含请求统计信息的安全页面.我已经多次复制了这个,所以如果它无法为您工作,请检查步骤,配置和证书.另外,检查nginx-ingress-controller*pod上的日志.

kubectl logs pod/nginx-ingress-controller-*********** -n ingress-nginx

这应该可以告诉你什么是错的.