一、版本对照表
二、下载文件
1、官网
https://github.com/kubernetes/ingress-nginx
2、选择版本
3、文件路径
下载deploy.yaml文件
三、修改文件
①修改deploy.yaml文件的276行(将LoadBalancer改为NodePort)
②修改镜像名
将k8s.gcr.io/ingress-nginx/controller:v1.1.1@sha256:0bc88eb15f9e7f84e8e56c14fa5735aaa488b840983f87bd79b1054190e660de改为registry.cn-hangzhou.aliyuncs.com/google_containers/nginx-ingress-controller
将k8s.gcr.io/ingress-nginx/kube-webhook-certgen:v1.1.1@sha256:64d8c73dca984af206adf9d6d7e46aa550362b1d7a01f3a0a91b20cc67868660改为dyrnq/kube-webhook-certgen:v1.1.1
③修改nodeSelector
将kubernetes.io/os: linux改为ingress: "true"
④添加hostNetwork: true #和nodeSelector同级
四、创建ingress
1、master节点创建labels
kubectl label nodes k8s-master ingress=ture
2、创建ingress-nginx
kubectl create -f deploy.yaml
3、检查
kubectl -n ingress-nginx get all
入上图,则ingress-nginx-controller创建成功
五、测试
1、准备yaml文件
apiVersion: v1
kind: Namespace
metadata:
labels:
kubernetes.io/metadata.name: my-test
name: my-test
spec:
finalizers:
- kubernetes
---
apiVersion: apps/v1
kind: Deployment
metadata:
annotations:
deployment.kubernetes.io/revision: "1"
labels:
k8s-app: my-nginx
name: my-nginx
namespace: my-test
spec:
replicas: 1
revisionHistoryLimit: 10
selector:
matchLabels:
k8s-app: my-nginx
strategy:
rollingUpdate:
maxSurge: 25%
maxUnavailable: 25%
type: RollingUpdate
template:
metadata:
labels:
k8s-app: my-nginx
spec:
restartPolicy: Always
containers:
- name: my-nginx
image: 192.168.44.130:5000/nginx:v1
imagePullPolicy: IfNotPresent
livenessProbe:
failureThreshold: 3
httpGet:
path: /
port: 80
scheme: HTTP
initialDelaySeconds: 30
periodSeconds: 10
successThreshold: 1
timeoutSeconds: 30
ports:
- containerPort: 80
protocol: TCP
resources: {}
---
apiVersion: v1
kind: Service
metadata:
labels:
k8s-app: my-nginx
name: my-nginx-svc
namespace: my-test
spec:
selector:
k8s-app: my-nginx
type: NodePort
ports:
- protocol: TCP
port: 80
targetPort: 80
nodePort: 30080
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: ingress-nginx
namespace: my-test
annotations:
kubernetes.io/ingress.class: "nginx"
spec:
rules:
- host: mynginx.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: my-nginx-svc
port:
number: 80
2、创建
kubectl create -f my-nginx.yaml
3、查看
kubectl -n my-test get all
4、配置hosts
cat >> /etc/hosts << 'EOF'
192.168.44.140 mynginx.com
EOF
5、访问
curl mynginx.com
如上图所示,恭喜你成功
六、可能出现的问题
查看my-nginx的ingress的事件出现<error: endpoints “default-http-backend“ not found>报错
kubectl -n my-test describe ingress ingress-nginx
原因:在Kubernetes中,默认后端是指当没有其他后端服务匹配到入口的请求时,流量将被发送到的地方。在Ingress资源中,你可以通过定义一个名为default-http-backend
的服务来配置默认后端。
解决方法:
定义一个名为default-http-backend
的服务
apiVersion: v1
kind: Service
metadata:
name: default-http-backend
namespace: kube-system
spec:
ports:
- port: 80
name: http
selector:
app: default-http-backend
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: default-http-backend
namespace: kube-system
spec:
replicas: 1
selector:
matchLabels:
app: default-http-backend
template:
metadata:
labels:
app: default-http-backend
spec:
containers:
- name: default-http-backend
image: k8s.gcr.io/defaultbackend:1.3
ports:
- containerPort: 8080
# 设置为 8080,可能需要根据你的 Ingress Controller 设置进行调整