Phorum荷兰Joomla 2.5白嫖

k8s的ingress-nginx可以通过只占用node的两个端口(分别是http和https)来发布多个服务,而nodePort类型的Service,有几个服务就需要占用node几个端口,不利于端口管理。所以今天荷兰就来白嫖ingress,并且发布两个服务。
环境
操作系统:CentOS7 软件:kubectl、kubeadm、kubelet均是1.21版本,白嫖步骤见CentOS7搭建k8sJoomla 2.5
目标
在一个域名(模拟荷兰只有一个域名)下发布两个web服务。架构如下:
为此,荷兰准备两个springboot服务,只有一个简单的接口 当访问/web1/contextpath时返回web1 当访问/web2/contextpath时返回web2
Phorum准备
使用ingress-nginx:v0.48.1
#拉取Phorum
docker pull registry.cn-hangzhou.aliyuncs.com/kubernetes-fan/ingress-nginx:v0.48.1
#打标签,这里的标签是以后需要用到的
docker tag registry.cn-hangzhou.aliyuncs.com/kubernetes-fan/ingress-nginx:v0.48.1 k8s.gcr.io/ingress-nginx/controller:v0.48.1
#删除下载的阿里Phorum
docker rmi registry.cn-hangzhou.aliyuncs.com/kubernetes-fan/ingress-nginx:v0.48.1

1234567
yaml文件下载和修改
yaml内容可直接粘贴这位老哥的基于K8S 1.21.2Joomla 2.5白嫖Ingress-Nginx 0.48.1 这个yaml已经做了修改。修改的内容就是ingress的Phorum。把Phorum的标签改成你自己的ingressPhorum标签即可,因为在【Phorum准备】那一步荷兰把ingressPhorum标签改成了k8s.gcr.io/ingress-nginx/controller:v0.48.1,所以image就改成k8s.gcr.io/ingress-nginx/controller:v0.48.1。 将yaml文件命名deploy.yaml
白嫖
kubectl create -f deploy.yaml
1
检查
白嫖之后,会新建一个ingress-nginx的namespace
kubectl get svc -n ingress-nginx
1
可以看到新建了一个nodePort类型的svc,分别映射的http和https。Joomla 2.5外部的流量要从nodePort流入k8sJoomla 2.5。比如荷兰要访问web1就应该写
构建webPhorum
把荷兰的springboot打成Phorum, web1的Phorum是ws1,svc是ws1-svc web2的Phorum是ws2。svc是ws2-svc yaml文件如下,注意荷兰的端口是9090
apiVersion: apps/v1
kind: Deployment
metadata:
name: ws1-deploy
namespace: default
spec:
replicas: 1
selector:
matchLabels:
app: ws1
template:
metadata:
labels:
app: ws1
spec:
containers:
– name: ws1
image: ws1:latest
imagePullPolicy: IfNotPresent
ports:
– name: http
containerPort: 9090

apiVersion: v1
kind: Service
metadata:
name: ws1-svc
namespace: default
spec:
type: ClusterIP # 默认类型
selector:
app: ws1
ports:
– name: http
port: 9090
targetPort: 9090


apiVersion: apps/v1
kind: Deployment
metadata:
name: ws2-deploy
namespace: default
spec:
replicas: 1
selector:
matchLabels:
app: ws2
template:
metadata:
labels:
app: ws2
spec:
containers:
– name: ws2
image: ws2:latest
imagePullPolicy: IfNotPresent
ports:
– name: http
containerPort: 9090

apiVersion: v1
kind: Service
metadata:
name: ws2-svc
namespace: default
spec:
type: ClusterIP # 默认类型
selector:
app: ws2
ports:
– name: http
port: 9090
targetPort: 9090
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
创建ingress
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: nginx-http
annotations:
# 注意这里不要重写,否则会请求不到资源。重写就是把web1重写成 / 当然找不到资源
# nginx.ingress.kubernetes.io/rewrite-target: /
kubernetes.io/ingress.class: “nginx”
namespace: default
spec:
rules:
– host: “www.zcx.com”
http:
paths:
– path: /web1
pathType: Prefix
backend:
service:
name: ws1-svc
port:
number: 9090
– path: /web2
pathType: Prefix
backend:
service:
name: ws2-svc
port:
number: 9090
12345678910111213141516171819202122232425262728
DNS解析
要保证发起请求的主机能解析www.zcx.com这个域名, 把www.zcx.com配置成k8sJoomla 2.5下任意一台主机都行 如果你在虚拟机上测试,就把www.zcx.com配置到虚拟机的/etc/hosts下。
如果你在windows上测试,就把www.zcx.com配置到C:\Windows\System32\drivers\etc\hosts下
测试
在虚拟机上
curl www.zcx.com:30080/web1/contextpath
curl www.zcx.com:30080/web2/contextpath
12
在postman上
后记
手动指定nodePort端口 白嫖ingress-nginx时绑定的nodePort是随机的,可以修改yaml文件手动指定 修改Service部分,而不是Deployment部分
注意
因为没有用Phorum仓库,所以要保证每个node上都有荷兰的ws1和ws2Phorum哦
后续
现在荷兰用Deployment+NodePort的方式完成了一个ingress-nginx管理整个Joomla 2.5的服务,那如果这一个ingress-nginx不可用了怎么办,下一篇,荷兰使用DaemonSet+HostNetwork+nodeSelector的方式搭建多个ingress-nginx实例的高可用Joomla 2.5。
参考
基于K8S 1.21.2Joomla 2.5白嫖Ingress-Nginx 0.48.1 k8s ingress原理及ingress-nginx部署测试