千家信息网

Kubernetes中ingress实现虚拟主机的步骤

发表于:2026-11-03 作者:千家信息网编辑
千家信息网最后更新 2026年11月03日,环境介绍主机IP地址服务master192.168.1.21k8snode01192.168.1.22k8snode02192.168.1.23k8s1、首先确定要运行ingress-nginx-co
千家信息网最后更新 2026年11月03日Kubernetes中ingress实现虚拟主机的步骤

环境介绍

主机IP地址服务
master192.168.1.21k8s
node01192.168.1.22k8s
node02192.168.1.23k8s

1、首先确定要运行ingress-nginx-controller服务。

在gitbub上找到所需的ingress的yaml文件


4. master下载

[root@master ingress]# wget https://raw.githubusercontent.com/kubernetes/ingress-nginx/nginx-0.29.0/deploy/static/mandatory.yaml

5. 修改 mandatory.yaml 文件

[root@master ingress]# vim mandatory.yaml      hostNetwork: true   #213

(1)执行一下
[root@master ingress]# kubectl apply -f mandatory.yaml 
(2)查看一下
[root@master ingress]# kubectl get pod -n ingress-nginx 

2、将ingress-nginx-controller暴露为一个Service资源对象。

[root@master yaml]# vim service-nodeport.yaml apiVersion: v1kind: Servicemetadata:  name: ingress-nginx  namespace: ingress-nginx  labels:    app.kubernetes.io/name: ingress-nginx    app.kubernetes.io/part-of: ingress-nginxspec:  type: NodePort  ports:    - name: http      port: 80      targetPort: 80      protocol: TCP    - name: https      port: 443      targetPort: 443      protocol: TCP  selector:    app.kubernetes.io/name: ingress-nginx    app.kubernetes.io/part-of: ingress-nginx---
(1)执行一下
[root@master ingress]# kubectl apply -f service-nodeport.yaml 
(2)查看一下
[root@master ingress]# kubectl get svc -n ingress-nginx 

3、创建一个deployment资源,和一个service资源, 并相互关联。

[root@master yaml]# vim deploy1.yamlapiVersion: extensions/v1beta1kind: Deploymentmetadata:  name: deploy1spec:  replicas: 2  template:    metadata:      labels:        app: nginx1    spec:      containers:      - name: nginx1        image: nginx---apiVersion: v1kind: Servicemetadata:  name: svc-1spec:  selector:    app: nginx1  ports:    - port: 80      targetPort: 80
执行一下
[root@master yaml]# kubectl apply -f deploy1.yaml 
查看一下
[root@master yaml]# kubectl get pod

[root@master yaml]# kubectl get svc

然后复制deploy1.yaml资源工创建另外"一对"服务。

[root@master yaml]# vim deploy2.yamlapiVersion: extensions/v1beta1kind: Deploymentmetadata:  name: deploy2spec:  replicas: 2  template:    metadata:      labels:        app: nginx2    spec:      containers:      - name: nginx2        image: nginx---apiVersion: v1kind: Servicemetadata:  name: svc-2spec:  selector:    app: nginx2  ports:    - port: 80      targetPort: 80
执行一下
[root@master yaml]# kubectl apply -f deploy2.yaml 
查看一下
[root@master yaml]# kubectl get deployments.

4. 创建ingress的yaml文件,关联是svc1和svc2

[root@master yaml]# vim ingress.yamlapiVersion: extensions/v1beta1kind: Ingressmetadata:  name: ingress-1spec:  rules:    - host: www1.bdqn.com      http:        paths:        - path: /          backend:            serviceName: svc-1            servicePort: 80---apiVersion: extensions/v1beta1kind: Ingressmetadata:  name: ingress-2spec:  rules:    - host: www2.bdqn.com      http:        paths:        - path: /          backend:            serviceName: svc-2            servicePort: 80
执行一下
[root@master yaml]# kubectl apply -f ingress.yaml 
查看一下
[root@master yaml]# kubectl get ingresses.

[root@master yaml]# kubectl describe ingresses. ingress-1

[root@master yaml]# kubectl describe ingresses. ingress-2

5、由于实验环境限制,所以自己用来模拟-一个域名。

进入本机的 C:\Windows\System32\drivers\etc , 修改hosts文件,添加Pod(ingress-controller)运行所在的节点IP。

访问一下
[root@master yaml]# kubectl get svc -n ingress-nginx //查看映射的端口

http://www1.bdqn.com:30817/

http://www2.bdqn.com:30817/

总结上述示例的pod是如何一步一步可以使client访问到的,总结如下:

后端pod===》service====》ingress规则====》写入Ingress-nginx-controller配置文件并自动重载使更改生效===》对本机进行域名解析====》实现client通过域名的IP+端口都可以访问到后端pod

Ingress资源实现https代理安全访问。

在上面的操作中,实现了使用ingress-nginx为后端所有pod提供一个统一的入口,那么,有一个非常严肃的问题需要考虑,就是如何为我们的pod配置CA证书来实现HTTPS访问?在pod中直接配置CA么?那需要进行多少重复性的操作?而且,pod是随时可能被kubelet杀死再创建的。当然这些问题有很多解决方法,比如直接将CA配置到镜像中,但是这样又需要很多个CA证书。

这里有更简便的一种方法,就拿上面的情况来说,后端有多个pod,pod与service进行关联,service又被ingress规则发现并动态写入到ingress-nginx-controller容器中,然后又为ingress-nginx-controller创建了一个Service映射到群集节点上的端口,来供client来访问。

在上面的一系列流程中,关键的点就在于ingress规则,我们只需要在ingress的yaml文件中,为域名配置CA证书即可,只要可以通过HTTPS访问到域名,至于这个域名是怎么关联到后端提供服务的pod,这就是属于k8s群集内部的通信了,即便是使用http来通信,也无伤大雅。

1. 生成证书

[root@master yaml]# mkdir https//创建一个放置证书的目录[root@master yaml]# cd https/[root@master https]# openssl req -x509 -sha256 -nodes -days 365 -newkey rsa:2048 -keyout tls.key -out tls.crt -subj "/CN=testsvc /O=testsvc"//生成证书

2. 创建secret资源, 保存证书。

[root@master https]# kubectl create secret tls tls-secret --key=tls.key --cert tls.crt

3、创建一个deploy3.yaml文件,模拟一个web服务。

[root@master yaml]# vim deploy3.yamlapiVersion: extensions/v1beta1kind: Deploymentmetadata:  name: deploy3spec:  replicas: 2  template:    metadata:      labels:        app: nginx3    spec:      containers:      - name: nginx3        image: nginx---apiVersion: v1kind: Servicemetadata:  name: svc-3spec:  selector:    app: nginx3  ports:    - port: 80      targetPort: 80
执行一下
[root@master https]# kubectl apply -f deploy3.yaml 
查看一下
[root@master https]# kubectl get pod

[root@master https]# kubectl get svc

4、创建对应的ingress规则。

[root@master https]# vim ingress.yamlapiVersion: extensions/v1beta1kind: Ingressmetadata:  name: ingress-3spec:  tls:    - hosts:      - www3.bdqn.com           #域名      secretName: tls-secret    #保存的证书  rules:    - host: www3.bdqn.com      http:        paths:        - path: /          backend:            serviceName: svc-3            servicePort: 80

执行一下

[root@master https]# kubectl apply -f ingress.yaml 

查看一下

[root@master https]# kubectl get ingresses.

5.查找对应service nodePort的443端口映射的端口,直接用浏览器访问即可。

进入本机的 C:\Windows\System32\drivers\etc , 修改hosts文件,添加Pod(ingress-controller)运行所在的节点IP。

查看映射端口
[root@master https]# kubectl get svc -n ingress-nginx 

https://www3.bdqn.com:31372/

k8s集群利用了"一切皆为资源"的原理,把生成的ca证书当成一个公共的资源来使用,使用时只需绑定保存的ca证书即可,不像之前一样,需要一个一个的创建ca证书,然后在关联起来,方便好用又快捷。

证书 文件 资源 域名 端口 关联 服务 配置 规则 节点 面的 本机 生成 运行 就是 所在 方法 环境 问题 通信 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 蓝思科技飞鸽互联网 广州百单互联网科技有限公司 互联网科技卖菜 互联网与科技发展 网络科技有限互联网 智网互联网科技 宜安科技 互联网金融 太原新华互联网科技学校怎么样 云创客互联网科技公司 江苏南京365互联网科技 哈尔滨新华互联网科技学院 银川新华互联网科技职业技术培训学校图片 受益于互联网科技的高速发展 互联网新科技动漫ppt素材 广州新华互联网科技学校电竞方面 区块链结合互联网科技 云南省自由互联网科技有限公司 江苏互联网智能科技软件 神州科技互联网有限公司 陕西彩京云互联网科技有限公司 科技互联网 互联网下的科技发展 期待互联网科技 华中科技大学互联网 亿账通互联网科技 互联网科技网站 无锡溥仪互联网科技有限公司 宁夏众和广鑫互联网科技有限公司 陕西九四连强互联网科技有限公司 科技和互联网行业的特点
0