kubernetes系列之Ingress-nginx
为什么需要ingress?
在kubernetes中,我们知道,如果需要实现在外部对k8s集群内部署的应用进行访问,那么就可以暴露一个类型为NodePort的service,而NodePort是需要占用集群中每台机器的一个端口,如果service数量太多的话,那么就需要占用大量的端口。Ingress提供了只使用一个service (NodePort),通过不同域名实现对不同应用的访问,本文主要主要是介绍基于nginx的实现。
大纲介绍
1、使用heml安装ingress-nginx。
2、部署nginx。
3、部署tomcat。
4、实现通过tomcat.com、nginx.com两个不同域名对以上部署的两个应用进行访问。
安装 Ingress-nginx
- 使用
heml进行安装
helm upgrade --install ingress-nginx ingress-nginx \
--repo https://kubernetes.github.io/ingress-nginx \
--namespace ingress-nginx --create-namespace
环境准备
- 创建名称空间
kubectl create ns test-ingress
部署Nginx
操作步骤
部署nginx、tomcat和部署常规应用没有太多区别,大致可以访问以下几步
1、编写yaml,使用kubectl apply -f <yaml文件>对yaml进行应用
2、查看Pod的运行状态(是否启动成功)
3、测试访问
- 创建配置文件
nginx.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: test-nginx
namespace: test-ingress
labels:
app: test-nginx
spec:
selector:
matchLabels:
app: test-nginx
template:
metadata:
labels:
app: test-nginx
spec:
containers:
- name: test-nginx
image: nginx
ports:
- containerPort: 80
name: test-nginx
volumeMounts:
- name: localtime
mountPath: /etc/localtime
volumes:
- name: localtime
hostPath:
path: /usr/share/zoneinfo/Asia/Shanghai
restartPolicy: Always
- 创建
Pod
[root@k8s-master ~]# kubectl apply -f nginx.yaml
deployment.apps/test-nginx created
- 查看
Pod的运行状态,Running表示已成功启动
[root@k8s-master ~]# kubectl get pods -n test-ingress
NAME READY STATUS RESTARTS AGE
test-nginx-84c44d9487-jnbfb 1/1 Running 0 3m9s
- 使用命令行创建
service
kubectl expose deployment test-nginx \
-n test-ingress \
--name test-nginx \
--port=80 \
--target-port=80
部署Tomcat
- 创建配置文件
tomcat.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: test-tomcat
namespace: test-ingress
labels:
app: test-tomcat
spec:
selector:
matchLabels:
app: test-tomcat
template:
metadata:
labels:
app: test-tomcat
spec:
containers:
- name: test-tomcat
image: tomcat:8.5.82
ports:
- containerPort: 8080
name: test-tomcat
volumeMounts:
- name: localtime
mountPath: /etc/localtime
volumes:
- name: localtime
hostPath:
path: /usr/share/zoneinfo/Asia/Shanghai
restartPolicy: Always
- 创建
Pod
[root@k8s-master ~]# kubectl apply -f tomcat.yaml
deployment.apps/test-tomcat created
- 查看
Pod的运行状态,Running表示已成功启动
[root@k8s-master ~]# kubectl get pods -n test-ingress
NAME READY STATUS RESTARTS AGE
test-nginx-84c44d9487-jnbfb 1/1 Running 0 13m
test-tomcat-55fbd7d79d-kzpzf 1/1 Running 0 16s
- 使用
yaml创建service
apiVersion: v1
kind: Service
metadata:
labels:
app: test-tomcat
name: test-tomcat
namespace: test-ingress
spec:
ports:
- port: 8080
protocol: TCP
targetPort: 8080
selector:
app: test-tomcat
通过Ingress对Nginx、Tomcat的访问
- 准备
nginx测试访问页面
kubectl exec -it -n test-ingress test-nginx-84c44d9487-jnbfb \
-- bash -c "echo 'Hello Nginx' > /usr/share/nginx/html/index.html"
- 准备
Tomcat测试访问页面
kubectl exec -it -n test-ingress test-tomcat-55fbd7d79d-kzpzf \
-- bash -c "mkdir /usr/local/tomcat/webapps/ROOT && echo 'Hello Tomcat' > /usr/local/tomcat/webapps/ROOT/index.html"
- 创建
Ingress
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: tomcat-nginx-ingress
namespace: test-ingress
spec:
ingressClassName: nginx
rules:
# 如果访问的域名为tomcat.com,则将请求转发到名称为test-tomcat的service的8080端口
- host: tomcat.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: test-tomcat
port:
number: 8080
# 如果访问的域名为nginx.com,则将请求转发到名称为test-nginx的service的80端口
- host: nginx.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: test-nginx
port:
number: 80
- 配置本地
hosts文件(/ect/hosts),需根据实际情况修改为机器的IP地址
192.168.49.150 tomcat.com
192.168.49.150 nginx.com
- 通过命令行可以查看 service 的端口为
31972
[root@k8s-master ~]# kubectl get service -n ingress-nginx
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
ingress-nginx-controller LoadBalancer 10.96.92.121 <pending> 80:31972/TCP,443:31028/TCP 14h
ingress-nginx-controller-admission ClusterIP 10.96.45.68 <none> 443/TCP 14h
- 测试通过域名进行访问
[root@k8s-master ~]# curl nginx.com:31972
Hello Nginx
[root@k8s-master ~]# curl tomcat.com:31972
Hello Tomcat
本文介绍了在Kubernetes环境中,如何使用Ingress和Nginx来解决多个应用对外服务时的端口占用问题。通过Helm安装Ingress-Nginx,然后分别部署Nginx和Tomcat应用,设置不同的域名访问规则,最后通过Ingress路由实现对这两个应用的域名访问。这种方法优化了资源利用,简化了服务暴露。
745

被折叠的 条评论
为什么被折叠?



