k8s1.17-Ingress http代理案例 作者:马育民 • 2023-10-03 12:12 • 阅读:10028 # 案例 为了实验方便,创建如下图所示的模型 [![](/upload/0/0/1IX6LVpDHz7k.png)](/upload/0/0/1IX6LVpDHz7k.png) # 创建pod ### 创建配置文件 创建配置文件 ``` vim tomcat-nginx.yaml ``` 按 `i` 键 复制粘贴下面内容: ``` apiVersion: apps/v1 kind: Deployment # 第一个控制器配置 metadata: name: nginx-deployment # 控制器名 namespace: test spec: replicas: 3 # 3个副本 selector: matchLabels: app: nginx-pod # 该控制器 控制 下面 标签是 app: nginx-pod 的pod template: # pod 模板,是对pod的配置 metadata: labels: app: nginx-pod # 指定标签 spec: containers: - name: nginx image: nginx:1.17.1 # nginx 镜像 ports: - containerPort: 80 # 容器端口 --- apiVersion: apps/v1 kind: Deployment # 第二个控制器配置 metadata: name: tomcat-deployment # 控制器名 namespace: test spec: replicas: 3 # 3个副本 selector: matchLabels: app: tomcat-pod # 该控制器 控制 下面 标签是 app: tomcat-pod 的pod template: # pod 模板,是对pod的配置 metadata: labels: app: tomcat-pod # 指定标签 spec: containers: - name: tomcat image: tomcat:8.5-jre10-slim # tomcat镜像,使用此版本有首页 ports: - containerPort: 8080 # 容器端口 --- apiVersion: v1 kind: Service # service 配置 metadata: name: nginx-service namespace: test spec: selector: app: nginx-pod # 选择 上面 标签是 app: nginx-pod 的 pod clusterIP: None # service的固定ip,不写就随机分配 type: ClusterIP # 网络类型,只能集群内访问 ports: - port: 80 # service 端口 targetPort: 80 # 转发给 pod 的端口 --- apiVersion: v1 kind: Service # service 配置 metadata: name: tomcat-service namespace: test spec: selector: app: tomcat-pod # 选择 上面 标签是 app: tomcat-pod 的 pod clusterIP: None # service的固定ip,不写就随机分配 type: ClusterIP # 网络类型,只能集群内访问 ports: - port: 8080 # service 端口 targetPort: 8080 # 转发给 pod 的端口 ``` 按 `esc`,`:wq` 保存退出 ### 创建 ``` kubectl create -f tomcat-nginx.yaml ``` ### 查看 ``` kubectl get svc -n test ``` 执行结果如下: ``` NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE nginx-service ClusterIP None 80/TCP 48s tomcat-service ClusterIP None 8080/TCP 48s ``` # Http代理 ### Ingress规则编写 创建ingress-http.yaml ``` vim ingress-http.yaml ``` 按 `i` 键 复制粘贴下面内容: ``` apiVersion: extensions/v1beta1 kind: Ingress # 配置 Ingress metadata: name: ingress-http # Ingress 名字 namespace: test # 所在命名空间 spec: rules: - host: nginx.myserver # 域名,必须指定 http: # 使用 http 协议 paths: - path: / # 上下文,访问 http://nginx.myserver:端口 backend: serviceName: nginx-service # 将请求转发给上面 service 名字是 nginx-service 的 pod servicePort: 80 # 该 service 端口 - host: tomcat.myserver # 域名,必须指定 http: # 使用 http 协议 paths: - path: / # 上下文,访问 http://tomcat.myserver:端口 backend: serviceName: tomcat-service # 将请求转发给上面 service 名字是 tomcat-service 的 pod servicePort: 8080 # 该 service 端口 ``` ### 创建 Ingress ``` kubectl create -f ingress-http.yaml ``` 执行结果如下表示成功: ``` ingress.extensions/ingress-http created ``` ### 查看 Ingress ``` kubectl get ing ingress-http -n test ``` 执行结果如下: ``` NAME HOSTS ADDRESS PORTS AGE ingress-http nginx.myserver,tomcat.myserver 10.108.196.2 80 14s ``` **解释:** - `HOSTS` 是 `*`,这里没有配置域名,所以显示 `8` - `ports` 是 `80`,因为上面配置 Ingress 中,是 http 的配置,所以显示 `80` ### 查看详情 ``` kubectl describe ing ingress-http -n test ``` 执行结果: ``` Name: ingress-http Namespace: test Address: 10.108.196.2 Default backend: default-http-backend:80 () Rules: Host Path Backends ---- ---- -------- nginx.myserver / nginx-service:80 (10.244.1.24:80,10.244.2.10:80,10.244.2.11:80) tomcat.myserver / tomcat-service:8080 (10.244.1.23:8080,10.244.1.25:8080,10.244.2.12:8080) Annotations: kubectl.kubernetes.io/last-applied-configuration: {"apiVersion":"extensions/v1beta1","kind":"Ingress","metadata":{"annotations":{},"name":"ingress-http","namespace":"test"},"spec":{"rules":[{"host":"nginx.myserver","http":{"paths":[{"backend":{"serviceName":"nginx-service","servicePort":80},"path":"/"}]}},{"host":"tomcat.myserver","http":{"paths":[{"backend":{"serviceName":"tomcat-service","servicePort":8080},"path":"/"}]}}]}} Events: Type Reason Age From Message ---- ------ ---- ---- ------- Normal UPDATE 6m47s (x2 over 3h18m) nginx-ingress-controller Ingress test/ingress-http ``` **解释:** - 访问 `http://nginx.myserver:ingress 的 service端口`,就将请求转发给 `nginx-service:80 (10.244.1.24:80,10.244.2.10:80,10.244.2.11:80)` - 访问 `http://tomcat.myserver:ingress 的 service端口/tomcatser`,就将请求转发给 `tomcat-service:80 (10.244.1.23:8080,10.244.1.25:8080,10.244.2.12:8080)` # 修改hosts文件 必须通过域名才能访问服务,所以要修改 windows 的 hosts 文件,增加下面配置: ``` # 访问该域名,是访问 master 服务器 192.168.58.101 nginx.myserver # 访问该域名,是访问 node1 服务器 192.168.58.102 tomcat.myserver ``` # 访问 在本地电脑上访问: http://nginx.myserver:32099 访问nginx服务 http://tomcat.myserver:32099 访问tomcat服务 **提示:** `32099` 是 ingress 的 service端口,可通过下面命令查看: ``` kubectl get svc -n ingress-nginx ``` 原文出处:https://malaoshi.top/show_1IX6LWUhwW96.html