我想将现有的AWS ALB用于我的kubernetes设置。即我不希望alb-ingress-controller创建或更新任何现有的AWS资源,即。目标群体,角色等。
如何让ALB与Kubernetes集群通信,从而将请求传递给现有服务并将响应返回给ALB以显示在前端?
我尝试this但它会为新的入口资源创建新的ALB。我想使用现有的。
答案 0 :(得分:1)
您基本上必须在运行Kubernetes Pod的实例上打开节点端口。然后你需要让ALB指向那些实例。有两种配置方法。通过Pod或通过服务。
要通过服务进行配置,您需要指定.spec.ports[].nodePort
。在默认设置中,端口需要介于30000
和32000
之间。此端口在每个节点上打开,并将重定向到指定的Pod(可能位于任何其他节点上)。这有另一个缺点,即使用多可用区设置时也会花钱。示例服务可能如下所示:
---
apiVersion: v1
kind: Service
metadata:
name: my-frontend
labels:
app: my-frontend
spec:
type: NodePort
selector:
app: my-frontend
ports:
- port: 8080
nodePort: 30082
要通过 Pod 进行配置,您需要指定.spec.containers[].ports[].hostPort
。这可以是任何端口号,但必须在调度Pod的节点上空闲。这意味着每个节点只能有一个Pod,它可能与其他应用程序的端口冲突。这有一个缺点,即从ALB的角度看,并非所有实例都是健康的,因为只有具有该Pod的节点才能接受流量。您可以添加一个在ALB上注册当前节点的sidecar容器,但这意味着额外的复杂性。一个例子可能如下所示:
---
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: my-frontend
labels:
app: my-frontend
spec:
replicas: 3
selector:
matchLabels:
app: my-frontend
template:
metadata:
name: my-frontend
labels:
app: my-frontend
spec:
containers:
- name: nginx
image: "nginx"
ports:
- containerPort: 80
hostPort: 8080