接着上文,排除故障后,我重新配置了metallb組件到k8s環境。
metallb為k8s service 的loadbalance負載方式提供免費的解決方案。
external-ip的收費方案,可以選擇GRE或Azure,或其他國內雲商LB方案。
以下是詳細安裝和配置步驟:
step 1:
root >> kubectl apply -f \
root >> kubectl get all -n metallb-system

step 2:
# 生成一個configmap,
# 注意:這里的 IP 地址范圍需要跟集群實際情況相對應。
root >> kubectl apply -f - << EOF
apiVersion: v1
kind: ConfigMap
metadata:
namespace: metallb-system
name: config
data:
config: |
peers:
# Cosmetic edit to make MetalLB notice that this is a new config.
- my-asn: 64512
peer-asn: 64512
peer-address: 10.4.0.100
- my-asn: 64512
peer-asn: 64512
peer-address: 10.4.0.101
- my-asn: 64512
peer-asn: 64512
peer-address: 10.4.0.102
address-pools:
- name: my-ip-space
protocol: bgp
avoid-buggy-ips: true
addresses:
- 10.5.0.0/24
# 或者限制IP池的范圍,如下
kubectl apply -f - << EOF
apiVersion: v1
kind: ConfigMap
metadata:
namespace: metallb-system
name: config
data:
config: |
address-pools:
- name: my-ip-space
protocol: bgp
avoid-buggy-ips: true
addresses:
- 10.5.0.10-10.5.10.250
# 執行完畢如下圖

# 然后,我們在k8s物理機器的外網(比如我這里一台客戶機192.168.3.XX),訪問上面configmap的四個IP
<1> IP_1 = 10.4.0.100 / 10.4.0.101 / 10.4.0.101
<2> IP_2 = 10.5.0.0/24 ==> 10.5.0.1 (也可以通過查詢k8s service得到, kubectl get service --all-namespaces -o wide。)
root >> ping 10.4.0.100 -c 3
root >> ping 10.4.0.101 -c 3
root >> ping 10.4.0.102 -c 3
root >> ping 10.5.0.1 -c 3
step 3:
# 查看配置過程
# pod名稱,來自step 1查詢pod結果
root >> kubectl get all -n metallb-system
root >> kubectl logs -f controller-5f898b44f4-4pkk6 -n metallb-system
step 4:
# 創建一個私有loadbalance provider的nginx服務和部署,如下
root >> kubectl apply -f - << EOF
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
name: nginx-lb
namespace: app
spec:
selector:
matchLabels:
app: nginx-lb
replicas: 1
template:
metadata:
labels:
app: nginx-lb
spec:
containers:
- name: nginx-lb
image: nginx:1.7.9
ports:
- containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
name: nginx-lb
namespace: app
spec:
type: LoadBalancer
ports:
- port: 8090
targetPort: 80
selector:
app: nginx-lb

step 5
# 查看創建后的結果,如下圖
root >> kubectl get all -n app -o wide
root >> kubectl get all -n app -o wide
# 測試一下nginx-lb的service,通過如下兩個地址
<1> cluster_ip : service_port
root >> curl http://10.3.48.227:8090
<1> cluster_ip : service_port
root >> curl http://10.3.48.227:8090
<2> external_ip : service_port
root >> curl http://10.5.0.10:8090
root >> curl http://10.5.0.10:8090
# 集群外部,設置一下網卡可以訪問網關10.5.0.1,則就可以打開nginx-lb服務如下
