我在将 CLB 升级到 NLB 时遇到问题。我通过控制台通过向导进行了手动升级,但连接不起作用。需要进行此升级,以便我们可以在负载均衡器中使用静态 IP。我认为它需要通过kubernetes升级,但我的尝试失败了。
我(认为我)对这个设置的理解是这个负载均衡器是使用 Helm 设置的。我还了解到,入口(控制器)负责将 http 请求重定向到 https。并且这个 lb 正在第 4 层上工作。
apiVersion: v1
kind: Service
metadata:
labels:
app: nginx-ingress
chart: nginx-ingress-1.30.0
component: controller
heritage: Tiller
release: nginx-ingress-external
name: nginx-ingress-external-controller
namespace: kube-system
selfLink: /api/v1/namespaces/kube-system/services/nginx-ingress-external-controller
spec:
clusterIP: 172.20.41.16
externalTrafficPolicy: Cluster
ports:
- name: http
nodePort: 30854
port: 80
protocol: TCP
targetPort: http
- name: https
nodePort: 30621
port: 443
protocol: TCP
targetPort: https
selector:
app: nginx-ingress
component: controller
release: nginx-ingress-external
sessionAffinity: None
type: LoadBalancer
status:
loadBalancer:
ingress:
- hostname: xxx.region.elb.amazonaws.com
如何通过修改此配置文件来执行升级?
答案 0 :(得分:1)
正如 @Jonas 在评论部分指出的那样,使用与现有选择器相同的选择器创建新的 LoadBalancer
Service
可能是最快和最简单的方法。因此,我们将有两个 LoadBalancer
Services
使用相同的 ingress-controller
。
您可以在以下代码段中看到我有两个具有完全相同端点的 Services
(ingress-nginx-1-controller
和 ingress-nginx-2-controller
):
$ kubectl get pod -o wide ingress-nginx-1-controller-5856bddb98-hb865
NAME READY STATUS RESTARTS AGE IP
ingress-nginx-1-controller-5856bddb98-hb865 1/1 Running 0 55m 10.36.2.8
$ kubectl get svc ingress-nginx-1-controller ingress-nginx-2-controller
NAME TYPE CLUSTER-IP EXTERNAL-IP
ingress-nginx-1-controller LoadBalancer 10.40.15.230 <PUBLIC_IP>
ingress-nginx-2-controller LoadBalancer 10.40.11.221 <PUBLIC_IP>
$ kubectl get endpoints ingress-nginx-1-controller ingress-nginx-2-controller
NAME ENDPOINTS AGE
ingress-nginx-1-controller 10.36.2.8:443,10.36.2.8:80 39m
ingress-nginx-2-controller 10.36.2.8:443,10.36.2.8:80 11m
另外为了避免停机,我们可以先将 DNS 记录更改为指向新的 LoadBalancer
,然后在传播时间过后我们可以安全地删除旧的 LoadBalancer
Service
。