一、 前言
原来我们需要将端口号对外暴露,通过 ip + 端口号就可以进行访问
原来是使用Service中的NodePort来实现
- NodePode的特点:
- 在每个节点上都会启动端口,在访问的时候通过任何节点,通过ip + 端口号就能实现访问
- 意味着:
- 因为端口不能重复,所以每个端口只能使用一次,一个端口对应一个应用
Ingress 可以弥补nodeport的不足
pod 和 ingress 通过service关联
而ingress作为统一入口,由service关联一组pod中
[x] tip:这两句话是车轱辘话,意思就是service连接了ingress和pod。ingress比service更高级!
- 首先service就是关联我们的pod
- 然后ingress作为入口,首先需要到service,然后发现一组pod
-
三、 Ingress工作流程
在实际的访问中,我们都是需要维护很多域名, a.com 和 b.com
然后不同的域名对应的不同的Service,然后service管理不同的pod
需要注意,ingress不是内置的组件,需要我们单独的安装四、 使用Ingress
步骤如下所示
部署ingress Controller【需要下载官方的】
- 创建ingress规则【对哪个Pod、名称空间配置规则】
4.1 创建Nginx Pod
创建一个nginx应用
然后对外暴露端口NodePort端口 ```shell kubectl expose deployment web —port=80 —target-port=80 —type:NodePort# 创建pod
kubectl create deployment web --image=nginx
# 查看
kubectl get pods
get svc
<a name="2I0Rd"></a>
### 4.2 部署 ingress controller
下面我们来通过yaml的方式,部署我们的ingress<br />配置文件如下所示[ingress-controller.yaml](https://www.yuque.com/attachments/yuque/0/2021/yaml/2639475/1618224286404-acc7d8aa-42bc-4dc1-92f4-437fa5c17a71.yaml?_lake_card=%7B%22src%22%3A%22https%3A%2F%2Fwww.yuque.com%2Fattachments%2Fyuque%2F0%2F2021%2Fyaml%2F2639475%2F1618224286404-acc7d8aa-42bc-4dc1-92f4-437fa5c17a71.yaml%22%2C%22name%22%3A%22ingress-controller.yaml%22%2C%22size%22%3A6633%2C%22type%22%3A%22%22%2C%22ext%22%3A%22yaml%22%2C%22status%22%3A%22done%22%2C%22source%22%3A%22transfer%22%2C%22id%22%3A%228Picp%22%2C%22card%22%3A%22file%22%7D)<br />这个文件里面,需要注意的是 hostNetwork: true,改成ture是为了让后面访问到<br />![image.png](https://cdn.nlark.com/yuque/0/2021/png/2639475/1618224360913-541d56e5-e839-4cb1-93bc-df59284f82da.png#height=392&id=ro83q&margin=%5Bobject%20Object%5D&name=image.png&originHeight=392&originWidth=620&originalType=binary&size=41549&status=done&style=none&width=620)<br />通过这种方式,其实我们在外面就能访问,这里还需要在外面添加一层
---
(迷惑,这句话啥意思,这块重复了,看视频,已经修正! 直接部署 !)
```shell
kubectl apply -f ingress-con.yaml
最后通过下面命令,查看是否成功部署 ingress
kubectl get pods -n ingress-nginx
4.3 创建ingress规则文件
创建ingress规则文件,ingress-h.yaml
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
name: example-ingress
spec:
rules:
# 域名,可以随便起
- host: example.ingredemo.com
http:
paths:
- path: /
backend:
serviceName: web
# 访问的service端口
servicePort: 80
kubectl apply -f ingress-h.yaml
#看一下
kubectl get pods -n ingress-nginx -o wide
#在node1或者node2监听端口
netstat -antp | grep 80
4.4 添加域名访问规则
在windows 的 hosts文件,添加域名访问规则【因为我们没有域名解析,所以只能这样做】
windows的host文件地址:
改:
# 查下
kubectl get pods -n ingress-nginx
get svc
kubectl get ing
最后通过域名就能访问
感受:不知道和域名访问有什么差别,具体没操作,先往下看吧,比较着急做任务!