安装ingress-nginx

发布时间 2023-03-28 21:00:23作者: lzjasd

基本环境

 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