一、 前言

原来我们需要将端口号对外暴露,通过 ip + 端口号就可以进行访问
原来是使用Service中的NodePort来实现

  • NodePode的特点:
    • 在每个节点上都会启动端口,在访问的时候通过任何节点,通过ip + 端口号就能实现访问
  • 意味着:
    • 因为端口不能重复,所以每个端口只能使用一次,一个端口对应一个应用
  • Ingress 可以弥补nodeport的不足

    • 实际访问中都是用域名,根据不同域名跳转到不同端口服务中

      二、 Ingress和Pod关系

  • pod 和 ingress 通过service关联

  • 而ingress作为统一入口,由service关联一组pod中

  • [x] tip:这两句话是车轱辘话,意思就是service连接了ingress和pod。ingress比service更高级!

Kubernetes核心技术Ingress - 图1

  • 首先service就是关联我们的pod
  • 然后ingress作为入口,首先需要到service,然后发现一组pod
  • 发现pod后,就可以做负载均衡等操作

    三、 Ingress工作流程

    在实际的访问中,我们都是需要维护很多域名, a.com 和 b.com
    然后不同的域名对应的不同的Service,然后service管理不同的pod
    Kubernetes核心技术Ingress - 图2
    需要注意,ingress不是内置的组件,需要我们单独的安装

    四、 使用Ingress

    步骤如下所示

  • 部署ingress Controller【需要下载官方的】

  • 创建ingress规则【对哪个Pod、名称空间配置规则】

    4.1 创建Nginx Pod

    创建一个nginx应用
    1. # 创建pod
    2. kubectl create deployment web --image=nginx
    3. # 查看
    4. kubectl get pods
    然后对外暴露端口NodePort端口 ```shell kubectl expose deployment web —port=80 —target-port=80 —type:NodePort

get svc

  1. <a name="2I0Rd"></a>
  2. ### 4.2 部署 ingress controller
  3. 下面我们来通过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 />通过这种方式,其实我们在外面就能访问,这里还需要在外面添加一层
  4. ---
  5. (迷惑,这句话啥意思,这块重复了,看视频,已经修正! 直接部署 !)
  6. ```shell
  7. kubectl apply -f ingress-con.yaml

Kubernetes核心技术Ingress - 图3
最后通过下面命令,查看是否成功部署 ingress

  1. kubectl get pods -n ingress-nginx

Kubernetes核心技术Ingress - 图4

4.3 创建ingress规则文件

创建ingress规则文件,ingress-h.yaml

  1. apiVersion: networking.k8s.io/v1beta1
  2. kind: Ingress
  3. metadata:
  4. name: example-ingress
  5. spec:
  6. rules:
  7. # 域名,可以随便起
  8. - host: example.ingredemo.com
  9. http:
  10. paths:
  11. - path: /
  12. backend:
  13. serviceName: web
  14. # 访问的service端口
  15. servicePort: 80
  1. kubectl apply -f ingress-h.yaml
  2. #看一下
  3. kubectl get pods -n ingress-nginx -o wide
  4. #在node1或者node2监听端口
  5. netstat -antp | grep 80

4.4 添加域名访问规则

在windows 的 hosts文件,添加域名访问规则【因为我们没有域名解析,所以只能这样做】
windows的host文件地址:
Kubernetes核心技术Ingress - 图5
改:
Kubernetes核心技术Ingress - 图6

  1. # 查下
  2. kubectl get pods -n ingress-nginx
  3. get svc
  4. kubectl get ing

最后通过域名就能访问
Kubernetes核心技术Ingress - 图7

感受:不知道和域名访问有什么差别,具体没操作,先往下看吧,比较着急做任务!