绑定完请刷新页面
取消
刷新

分享好友

×
取消 复制
K8s 网络插件 terway 切换故障解决
2023-02-24 10:39:17


本文转自 mbox.dev,原文:https://mbox.dev/dev/alicloud/terway/,版权归原作者所有。

在阿里云售前工程师来公司做技术宣讲前,购买阿里云 K8s 集群都是用的是传统网络插件 Flannel。宣讲后,被安利了 terway  插件的优势,就是 ip 范围可以无限扩容。这点非常具有诱惑力,所以,这次公司切换新集群就选择了 terway 插件。可是也真是这个 terway 网络插件,搞得 3 天没睡好觉。

问题主要发生的原因是:

使用terway 网络插件, 在集群中创建 service 资源,不支持命名目的端口映射,只能使用数字端口。

现实情况是:

创建了一个 Loadbalancer 类型的 service 服务,共享一个相同的 VIP, 通过不同的对外端口映射集群内网服务。

因为 terway 网络插件不支持命名目的端口映射,而内部服务虽然名称不同但是都会监听在相同的端口上进行服务。这点在 flannel 插件上运行完好的服务,到了 terway 网络插件就完全不可用了。

在 flannel 网络插件上,如下部署 LB 服务:

apiVersion: v1
kind: Pod
metadata:
  name: nginx
  labels:
    app.kubernetes.io/name: proxy
spec:
  containers:
  - name: nginx
    image: nginx:stable
    ports:
      - containerPort: 80
        name: http-web-001
---
apiVersion: v1
kind: Pod
metadata:
  name: nginx
  labels:
    app.kubernetes.io/name: proxy
spec:
  containers:  
  - name: nginx
    image: nginx:stable
    ports:
      - containerPort: 80
        name: http-web-002

---
apiVersion: v1
kind: Service
metadata:
  name: nginx-service
spec:
  selector:
    app.kubernetes.io/name: proxy
  type: LoadBalancer
  ports:
  - name: name-of-service-port-001
    protocol: TCP
    port: 8001
    targetPort: http-web-001 ## 目的端口使用名称映射
  - name: name-of-service-port-002
    protocol: TCP
    port: 8002
    targetPort: http-web-002 ## 目的端口使用名称映射  

到了 terway 网络插件上,就只能分开部署:

apiVersion: v1
kind: Service
metadata:
  name: nginx-service-001
spec:
  selector:
    app.kubernetes.io/name: proxy
  type: LoadBalancer
  ports:
  - name: name-of-service-port-001
    protocol: TCP
    port: 8001
    targetPort: 80 ## 目的端口只能使用数字
---
apiVersion: v1
kind: Service
metadata:
  name: nginx-service-002
type: LoadBalancer
spec:
  selector:
    app.kubernetes.io/name: proxy
  ports:
  - name: name-of-service-port-002
    protocol: TCP
    port: 8002
    targetPort: 80 ## 目的端口只能使用数字

很明显这样的操作方式非常别扭,为了增加端口,必须增加 service 资源,否则相同的目的端口 80 就无法映射。

而且分开部署的同时又会动态创建新的 LB 资源 IP, 为了实现多个 service 资源共享同一个 IP 资源。又必须加上阿里云集群特有的 annotations. 虽然非常不愿意在项目的部署配置上加上定制化的配置,但是为了完成工作还是必须这么干。

结果阿里云给的共享 IP 的文档真的很难找,经过发起工单,各种交互终完成了需要的效果。

这里简单记录一下,阿里集群上如何共享 LB 资源 IP。

  • 手动创建一个 LB 资源,获得 LB 资源的 id 号,以及固定 IP。
  • 在 service 资源的 annotations 上增加以下配置:
apiVersion: v1
kind: Service
metadata:
  name: nginx-service-001
  annotations:   # aliyun 固定 LB 资源配置
    service.beta.kubernetes.io/alicloud-loadbalancer-id: [$SLB_ID]   
    service.beta.kubernetes.io/alicloud-loadbalancer-force-override-listeners: 'true'
spec:
  selector:
    app.kubernetes.io/name: proxy
  type: LoadBalancer
  ports:
  - name: name-of-service-port-001
    protocol: TCP
    port: 8001
    targetPort: 80 ## 目的端口只能使用数字
---
apiVersion: v1
kind: Service
metadata:
  name: nginx-service-002
  annotations: # aliyun 固定 LB 资源配置
    service.beta.kubernetes.io/alicloud-loadbalancer-id: [$SLB_ID]
    service.beta.kubernetes.io/alicloud-loadbalancer-force-override-listeners: 'true'
type: LoadBalancer
spec:
  selector:
    app.kubernetes.io/name: proxy
  ports:
  - name: name-of-service-port-002
    protocol: TCP
    port: 8002
    targetPort: 80 ## 目的端口只能使用数字

总结下来文字不多,但字字带泪,不记录一下实在对不起处理过程中出现的各种 emo。





分享好友

分享这个小栈给你的朋友们,一起进步吧。

K8s
创建时间:2020-05-14 13:51:19
K8s技术分享
展开
订阅须知

• 所有用户可根据关注领域订阅专区或所有专区

• 付费订阅:虚拟交易,一经交易不退款;若特殊情况,可3日内客服咨询

• 专区发布评论属默认订阅所评论专区(除付费小栈外)

栈主、嘉宾

查看更多
  • 飘絮絮絮丶
    栈主
  • gaokeke123
    嘉宾
  • LCR_
    嘉宾

小栈成员

查看更多
  • at_1
  • zhengchengming
  • chenglinjava0501
  • hansen_hello2019
戳我,来吐槽~