我想保护在Kubernetes(EKS)上运行的Web应用程序的安全。 我有一个前端服务。前端服务在端口80上运行。我想在端口443上运行。当我获得全部的kubectl时,我看到我的负载均衡器在端口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
答案 0 :(得分:0)
这就是我的集群可以在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"
希望这对您有用。
答案 1 :(得分:0)
AWS ALB Ingress Controller旨在在Ingress YAML配置文件中的AWS级别上创建应用程序负载均衡器和相关资源。实际上,ALB Ingress控制器从Ingress YAML定义文件中解析负载均衡器的配置,然后对每个Kubernetes服务应用Target groups一个带有指定实例的实例,而NodePorts应用于一个特定节点。在顶层Listeners上,公开负载均衡器的连接端口,并根据已定义的路由规则,根据官方AWS ALB Ingress Controller工作流程documentation决定请求路由。
在简短的理论考察之后,我对您当前的配置有一些担忧:
kubectl logs -n kube-system $(kubectl get po -n kube-system | egrep -o "alb-ingress[a-zA-Z0-9-]+")
然后验证是否在AWS console内成功生成了Load Balancer。
检查目标组以查看特定的ALB,以确保 health检查k8s实例都很好。
确保安全组是否为您的实例包含适当的防火墙规则,以允许跨ALB的入站和出站网络流量。
我鼓励您熟悉官方AWS ALB Ingress Controller documentation中有关HTTP到HTTPS重定向的专门章节。
答案 2 :(得分:0)
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/