我想保护在 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
最佳答案
AWS ALB Ingress Controller旨在在 Ingress YAML 配置文件中在 AWS 级别创建应用程序负载均衡器和相关资源。实际上,ALB Ingress Controller 从 Ingress YAML 定义文件解析负载均衡器的配置,然后应用 Target groups每个具有指定实例的 Kubernetes 服务和 NodePorts暴露在特定节点上。在顶层 Listeners公开负载均衡器的连接端口,并根据官方 AWS ALB 入口 Controller 工作流程定义的路由规则决定请求路由documentation .
在短暂的理论之旅之后,我对您当前的配置有一些担忧:
setup并检查相关日志:
kubectl logs -n kube-system $(kubectl get po -n kube-system | egrep -o "alb-ingress[a-zA-Z0-9-]+")
然后验证AWS内是否已经成功生成Load Balancer console .
health检查 k8s 实例都很好。
我鼓励您熟悉官方 AWS ALB 入口 Controller 中有关 HTTP 到 HTTPS 重定向的专门章节 documentation .
关于yaml - 用于 eks 负载均衡器的 https,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56814167/