K8S 部署 openelp (二层模式)

环境

IP 角色 操作系统
172.16.16.108 k8s-master-1 CentOS Linux release 7.8.2003 (Core)
172.16.16.109 k8s-node-1 CentOS Linux release 7.8.2003 (Core)
172.16.16.110 k8s-node-2 CentOS Linux release 7.8.2003 (Core)
172.16.16.119 client CentOS Linux release 7.8.2003 (Core)

部署 openelb

# 添加 helm 源
helm repo add openelb https://openelb.github.io/openelb
helm repo update openelb

# 下载配置
mkdir -p /data/yaml/openelb-system/openelb
cd /data/yaml/openelb-system/openelb

helm search repo openelb
helm pull openelb/openelb

tar zxvf openelb-0.6.1.tgz

# 修改镜像
vi my-values.yaml
global:
  imageRegistry: docker.rainbond.cc

# 创建命名空间
kubectl create ns openelb-system

# 部署
helm -n openelb-system install -f my-values.yaml openelb ./openelb

# 检查
kubectl -n openelb-system get pod

在二层模式下使用 OpenELB

  • 要求客户端机器需要与Kubernetes集群节点在同一个网络上。
  • 第二层模式要求的基础设施环境允许匿名ARP/NDP报文。如果OpenELB安装在基于云的Kubernetes集群中进行测试,您需要与云供应商确认是否允许匿名ARP/NDP报文。否则不能使用二层模式。
# 检查 openelb  是否启用了二层模式
kubectl edit ds -n openelb-system openelb-speaker

# 把 enable-layer2 参数设置成 true 并保存退出,openelb-speaker 服务会自动重启。
   containers:
     - command:
         - openelb-speaker
       args:
         - --api-hosts=:50051
         - --enable-layer2=true
         ... ...

# 为kube-proxy启用strictARP
kubectl edit configmap kube-proxy -n kube-system

# 在 kube-proxy ConfigMap YAML配置中,将 data.config.conf.ipvs.strictARP 设置为 true。
ipvs:
  strictARP: true

# 执行以下命令重启 kube-proxy
kubectl rollout restart daemonset kube-proxy -n kube-system

# 创建Eip对象
cd /data/yaml/openelb-system/openelb

cat >> layer2-eip.yaml << EOF 
apiVersion: network.kubesphere.io/v1alpha2
kind: Eip
metadata:
    name: layer2-eip
spec:
    address: 172.16.16.200-172.16.16.222
    interface: ens33
    protocol: layer2

EOF

kubectl apply -f layer2-eip.yaml

# 测试,我这边以 apisix 的 gateway 进行测试
cd /data/yaml/apisix/apisix

cat >> svc-gateway-eip.yaml << EOF 
apiVersion: v1
kind: Service
metadata:
  name: apisix-gateway-eip
  namespace: apisix
  annotations:
    lb.kubesphere.io/v1alpha1: openelb
    eip.openelb.kubesphere.io/v1alpha2: layer2-eip
spec:
  ports:
  - name: apisix-gateway
    port: 80
    protocol: TCP
    targetPort: 9080
  - name: apisix-gateway-tls
    port: 443
    protocol: TCP
    targetPort: 9443
  selector:
    app.kubernetes.io/instance: apisix
    app.kubernetes.io/name: apisix
  type: LoadBalancer
EOF

kubectl apply -f svc-gateway-eip.yaml


使用浏览器访问 http://172.16.16.200

参考

https://openelb.io/docs/getting-started/installation/install-openelb-on-kubernetes/#install-openelb-using-helm
https://openelb.io/docs/getting-started/usage/use-openelb-in-layer-2-mode/

posted @ 2024-08-23 14:36  klvchen  阅读(94)  评论(0)    收藏  举报