K8S集群-基于Ingress资源实现域名访问

目录

一、准备

1、在master节点部署ingress的资源清单文件

2、在node节点部署ingress-1.11.tar镜像(根据部署环境选择版本)

二、基于NodePort模式验证

1、在master节点进入ingress的资源清单文件

2、修改deploy.yaml文件

3、生成deploy.yaml资源

4、在node节点中将ingress镜像导入

5、现在修改NodPort

6、写一个nginx资源清单

7、设置http代理,创建ingress-http.yaml

8、创建ingress-http.yaml资源

9、查看pod运行节点和端口号

10、在访问主机的hosts文件中添加pod运行节点的ip和域名

11、通过域名访问

三、基于LoadBalancer模式验证

1、在master节点部署metallb负载均衡器

2、进入metallb配置文件

3、创建一个IP地址池

4、关联IP地址池

5、加载metallb资源清单

6、加载IP池

7、加载地址池关联规则

8、创建nginx资源清单

9、向http域名解析文件中添加新域名

10、更新域名解析文件

11、加载nginx资源清单

[12、修改 LoadBalancer](#12、修改 LoadBalancer)

13、访问


一、准备

1、在master节点部署ingress的资源清单文件

2、在node节点部署ingress-1.11.tar镜像(根据部署环境选择版本)

二、基于NodePort模式验证

1、在master节点进入ingress的资源清单文件

cd /ingress/ingress-nginx-controller-v1.11.3/deploy/static/provider/cloud

2、修改deploy.yaml文件

  • type修改为NodePort(可以在文件中直接修改,也可以启动后修改)
  • 删除文件内所有版本后的哈希算法

3、生成deploy.yaml资源

kubect create -fdeploy.yaml

会生成新的资源清单ingress-nginx

4、在node节点中将ingress镜像导入

docker load -i ingress-1.11.tar

5、现在修改NodPort

kubectl -n ingress-nginx edit svc ingress-nginx-controller

6、写一个nginx资源清单

apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: nginx-deploy
name: nginx-deploy
spec:
replicas: 3
selector:
matchLabels:
app: nginx-deploy
template:
metadata:
labels:
app: nginx-deploy
spec:
containers:

  • image: nginx:latest
    imagePullPolicy: IfNotPresent
    name: nginx
    ports:
  • containerPort: 80

apiVersion: v1
kind: Service
metadata:
labels:
app: nginx-deploy
name: nginx-svc
spec:
ports:

  • port: 80
    protocol: TCP
    targetPort: 80
    selector:
    app: nginx-deploy
    type: ClusterIP

7、设置http代理,创建ingress-http.yaml

apiVersion: networking.k8s.io/v1
kind: Ingress # 创建一个类型为Ingress的资源
metadata:
name: nginx-ingress # 这个资源的名字为 nginx-ingress
spec:
ingressClassName: nginx # 使用nginx
rules:

  • host: nginx.jx.com # 访问此内容的域名
    http:
    paths:
  • backend:
    service:
    name: nginx-svc # 对应nginx的服务名字,该规则的namespace必须与service的一致
    port:
    number: 80 # 访问的端口
    path: / # 匹配规则
    pathType: Prefix # 匹配类型,这里为前缀

8、创建ingress-http.yaml资源

kubectl apply -f ingress-http.yaml

9、查看pod运行节点和端口号

node1节点

端口号31382

10、在访问主机的hosts文件中添加pod运行节点的ip和域名

11、通过域名访问

三、基于LoadBalancer模式验证

1、在master节点部署metallb负载均衡器

2、进入metallb配置文件

cd /metallb-0.14.8/config/manifests

3、创建一个IP地址池

cat >IPAddressPool.yaml<<EOF
apiVersion: metallb.io/v1beta1
kind: IPAddressPool
metadata:
name: planip-pool #这里与下面的L2Advertisement的ip池名称需要一样
namespace: metallb-system
spec:
addresses:

  • 192.168.158.135-192.168.158.150 #自定义ip段,不要与集群IP冲突
    EOF

4、关联IP地址池

cat >L2Advertisement.yaml<<EOF
apiVersion: metallb.io/v1beta1
kind: L2Advertisement
metadata:
name: planip-pool
namespace: metallb-system
spec:
ipAddressPools:

  • planip-pool #这里需要跟上面ip池的名称保持一致
    EOF

5、加载metallb资源清单

6、加载IP池

7、加载地址池关联规则

8、创建nginx资源清单

apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: nginx-deploy1
name: nginx-deploy1
spec:
replicas: 3
selector:
matchLabels:
app: nginx-deploy1
template:
metadata:
labels:
app: nginx-deploy1
spec:
containers:

  • image: nginx
    imagePullPolicy: IfNotPresent
    name: nginx1
    ports:
  • containerPort: 80

apiVersion: v1
kind: Service
metadata:
labels:
app: nginx-deploy1
name: nginx-svc1
spec:
ports:

  • port: 80
    protocol: TCP
    targetPort: 80
    selector:
    app: nginx-deploy1
    type: LoadBalancer

9、向http域名解析文件中添加新域名

10、更新域名解析文件

11、加载nginx资源清单

12、修改 LoadBalancer

kubectl -n ingress-nginx edit svc ingress-nginx-controller

13、集群外部主机访问