基本环境
kubectl get nodes -o wide
NAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTIME
master Ready control-plane 5d4h v1.26.2 192.168.14.132 <none> CentOS Linux 7 (Core) 3.10.0-1160.81.1.el7.x86_64 docker://23.0.1
node1 Ready <none> 5d3h v1.26.2 192.168.14.133 <none> CentOS Linux 7 (Core) 3.10.0-1160.81.1.el7.x86_64 docker://23.0.1
node3 Ready <none> 5d3h v1.26.2 192.168.14.135 <none> CentOS Linux 7 (Core) 3.10.0-1160.81.1.el7.x86_64 docker://23.0.1
安装metalib
https://metallb.universe.tf/
我将向您展示如何使用 Metal LB 在 Kubernetes 集群中设置 Nginx 入口控制器以实现负载平衡
kubectl get configmap kube-proxy -n kube-system -o yaml | \
sed -e "s/strictARP: false/strictARP: true/" | \
kubectl diff -f - -n kube-system
kubectl get configmap kube-proxy -n kube-system -o yaml | \
sed -e "s/strictARP: false/strictARP: true/" | \
kubectl apply -f - -n kube-system
kubectl get configmap -n kube-system kube-proxy -o yaml |grep strictARP
strictARP: true
kubectl apply -f https://raw.githubusercontent.com/metallb/metallb/v0.13.9/config/manifests/metallb-native.yaml
docker pull quay.io/metallb/controller:v0.13.9
docker save -o metallb_controller.tar quay.io/metallb/controller:v0.13.9
docker pull quay.io/metallb/speaker:v0.13.9
docker save -o metallb_speaker.tar quay.io/metallb/speaker:v0.13.9
kubectl apply -f metallb-native.yaml
kubectl get all -n metallb-system
cat > lay2_1.yaml << EOF
apiVersion: metallb.io/v1beta1
kind: IPAddressPool
metadata:
name: first-pool
namespace: metallb-system
spec:
addresses:
- 192.168.14.240-192.168.14.250 # 这个是宿主机所在网段的ip范围
EOF
cat > lay2_2.yaml << EOF
apiVersion: metallb.io/v1beta1
kind: L2Advertisement
metadata:
name: example
namespace: metallb-system
spec:
ipAddressPools:
- first-pool
EOF
这个是将L2Advertisement 和IPAddressPool 相关联
安装ingress-nginx
https://kubernetes.github.io/ingress-nginx/deploy/
kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.7.0/deploy/static/provider/cloud/deploy.yaml
kubectl get pods --namespace=ingress-nginx
kubectl get all -n ingress-nginx
NAME READY STATUS RESTARTS AGE
pod/ingress-nginx-admission-create-77767 0/1 Completed 0 64s
pod/ingress-nginx-admission-patch-np7dn 0/1 Completed 1 64s
pod/ingress-nginx-controller-585cf7f479-zqshp 1/1 Running 0 64s
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/ingress-nginx-controller LoadBalancer 10.96.243.186 192.168.14.240 80:30668/TCP,443:31648/TCP 64s
service/ingress-nginx-controller-admission ClusterIP 10.98.161.88 <none> 443/TCP 64s
NAME READY UP-TO-DATE AVAILABLE AGE
deployment.apps/ingress-nginx-controller 1/1 1 1 64s
NAME DESIRED CURRENT READY AGE
replicaset.apps/ingress-nginx-controller-585cf7f479 1 1 1 64s
NAME COMPLETIONS DURATION AGE
job.batch/ingress-nginx-admission-create 1/1 5s 64s
job.batch/ingress-nginx-admission-patch 1/1 6s 64s
测试
创建pod
创建service
创建ingress规则
cat pod-test1.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-nginx
spec:
selector:
matchLabels:
run: my-nginx
replicas: 2
template:
metadata:
labels:
run: my-nginx
spec:
containers:
- name: my-nginx
image: nginx
ports:
- containerPort: 80
cat service_test1.yaml
apiVersion: v1
kind: Service
metadata:
name: my-nginx
labels:
run: my-nginx
spec:
ports:
- port: 80
protocol: TCP
selector:
run: my-nginx
cat ingress3.yaml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: ingress-myapp
namespace: default
#annotations:
# kubernetes.io/ingress.class: "nginx"
spec:
ingressClassName: nginx
rules:
- host: tomcat.lucky.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: my-nginx
port:
number: 80
[root@master ingress]# kubectl get ingress
NAME CLASS HOSTS ADDRESS PORTS AGE
ingress-myapp nginx tomcat.lucky.com 192.168.14.240 80 102s
[root@master ingress]# kubectl describe ingress ingress-myapp
Name: ingress-myapp
Labels: <none>
Namespace: default
Address: 192.168.14.240
Ingress Class: nginx
Default backend: <default>
Rules:
Host Path Backends
---- ---- --------
tomcat.lucky.com
/ my-nginx:80 (192.168.135.16:80,192.168.166.165:80)
Annotations: <none>
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal Sync 106s (x2 over 112s) nginx-ingress-controller Scheduled for sync
修改/etc/hosts
192.168.14.240 tomcat.lucky.com
curl -I tomcat.lucky.com
HTTP/1.1 200 OK
Date: Tue, 28 Mar 2023 12:47:56 GMT
Content-Type: text/html
Content-Length: 615
Connection: keep-alive
Last-Modified: Tue, 28 Dec 2021 15:28:38 GMT
ETag: "61cb2d26-267"
Accept-Ranges: bytes
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 使用C#创建一个MCP客户端
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 按钮权限的设计及实现