【问题标题】:https for eks loadbalancer用于 eks 负载均衡器的 https
【发布时间】:2019-06-29 00:01:52
【问题描述】:

我想保护在 Kubernetes (EKS) 上运行的 Web 应用程序的安全。 我有一个前端服务。前端服务在端口 80 上运行。我想在端口 443 上运行它。当我 kubectl get all 时。我看到我的负载均衡器在端口 443 上运行,但我无法在浏览器中打开它。

---
apiVersion: v1
kind: Service
metadata:
  name: hello-kubernetes
  annotations:
    service.beta.kubernetes.io/aws-load-balancer-ssl-cert: arn:aws:acm:us-west-2:1234567890:certificate/12345c409-ec32-41a8-8542-712345678
    service.beta.kubernetes.io/aws-load-balancer-backend-protocol: http
spec:
  type: LoadBalancer
  ports:
  - port: 443
    targetPort: 80
    protocol: TCP
  selector:
    app: hello-kubernetes
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: hello-kubernetes
spec:
  replicas: 1
  selector:
    matchLabels:
      app: hello-kubernetes
  template:
    metadata:
      labels:
        app: hello-kubernetes
    spec:
      containers:
      - name: hello-kubernetes
        image: 123456789.dkr.ecr.us-west-2.amazonaws.com/demoui:demo123
        ports:
        - containerPort: 80
        env:
        - name: MESSAGE
          value: Hello Kubernetes!
---
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: hello-ingress
  annotations:
    kubernetes.io/ingress.class: "alb"
    alb.ingress.kubernetes.io/healthcheck-path: "/"
    alb.ingress.kubernetes.io/success-codes: "200,404"
    alb.ingress.kubernetes.io/scheme: "internet-facing"
    alb.ingress.kubernetes.io/listen-ports: '[{"HTTP":80} , {"HTTPS": 443}]'
spec:
  rules:
  - http:
      paths:
      - path: /
        backend:
          serviceName: hello-kubernetes
          servicePort: 80

【问题讨论】:

    标签: yaml kubectl kubernetes-ingress amazon-eks


    【解决方案1】:

    AWS ALB Ingress Controller 旨在在 Ingress YAML 配置文件中创建应用程序负载均衡器和 AWS 级别的相关资源。实际上,ALB Ingress 控制器从 Ingress YAML 定义文件中解析负载均衡器的配置,然后为每个具有指定实例的 Kubernetes 服务应用Target groups 一个,并在特定节点上公开NodePorts。在顶层 Listeners 公开负载均衡器的连接端口,并根据官方 AWS ALB 入口控制器工作流 documentation 定义的路由规则决定请求路由。

    在短暂的理论之旅之后,我对您当前的配置有一些担忧:

    1. 首先,我建议检查 AWS ALB 入口控制器
      setup 并检查相关日志:

    kubectl logs -n kube-system $(kubectl get po -n kube-system | egrep -o "alb-ingress[a-zA-Z0-9-]+")

    然后验证是否在AWSconsole内成功生成了Load Balancer。

    1. 检查特定 ALB 的 目标组,以确保 health 检查 k8s 实例一切正常。

    2. 确保安全组是否包含适用于您的实例的防火墙规则,以允许跨 ALB 的入站和出站网络流量。

    我鼓励您熟悉官方 AWS ALB 入口控制器documentation 中有关 HTTP 到 HTTPS 重定向的专门章节。

    【讨论】:

    • 我希望我的设置是 aws api 网关 -->ambassador/traefik ---> eks alb 负载均衡器
    【解决方案2】:

    这是我的集群在 https 上运行的内容。

    在我的入口/负载均衡器中:

    service.beta.kubernetes.io/aws-load-balancer-ssl-cert: CERT
    service.beta.kubernetes.io/aws-load-balancer-ssl-ports: https
        # ports using the ssl certificate
    service.beta.kubernetes.io/aws-load-balancer-backend-protocol: http
        # which protocol a Pod speaks
    

    在我的 Ingress 控制器中,nginx 配置的 configMap:

        app.kubernetes.io/force-ssl-redirect: "true"
    

    希望这对你有用。

    【讨论】:

    • 我的情况应该是 alb.kubernetes.io/force-ssl-redirect: "true" 吗?
    • 我认为它仍然是应用程序,但你应该尝试两者,我有一个经典的 LB,我正在使用 nginx 作为内部入口。
    • 我在 nginx 配置中控制这个,nginx.conf 文件虽然不理想。这是我的临时解决方案,线程中提供的其他解决方案不起作用。
    【解决方案3】:
    alb.ingress.kubernetes.io/actions.ssl-redirect: '{"Type": "redirect", "RedirectConfig": { "Protocol": "HTTPS", "Port": "443", "StatusCode": "HTTP_301"}}'
    

    https://kubernetes-sigs.github.io/aws-alb-ingress-controller/guide/tasks/ssl_redirect/

    【讨论】:

      猜你喜欢
      • 2021-12-04
      • 1970-01-01
      • 2014-02-12
      • 2020-05-08
      • 2021-03-28
      • 2022-01-02
      • 2021-12-07
      • 2015-05-22
      • 1970-01-01
      相关资源
      最近更新 更多