官网仓库:ingress-nginx仓库

从以上仓库点击 Getting Started 就到了安装上文档
NGINX Ingress Controller 安装文档

官网下载下来的 deploy 文件中 ,ingress 都是 LoadBalance
所以,学习环境和测试环境最好先去配置为支持 LoadBalance 的

前车之鉴:
本人之前着急进行下去没改成 NodePort 方式,(否则 controller 会一直 Pending )然后,各种端口转来转去的,非常混乱,所以,回头配置了 MetalLB 之后,重新走了一遍!

k8s学习: 使用 MetalLB 给测试环境配置LoadBalancer 服务

1、下载 deploy 文件,并替换被墙的 image

  1. 按照 kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.1.0/deploy/static/provider/cloud/deploy.yaml

    这里最新版本时 v1.1.0 ,所以,先下载 deploy 文件

    wget https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.0.5/deploy/static/provider/cloud/deploy.yaml --no-check-certificate

    里面镜像被墙,所以,通过 docker search 之后,只好降级到 v1.0.5

    wget https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.0.5/deploy/static/provider/cloud/deploy.yaml --no-check-certificate

  2. 替换 image

    vim deploy.yaml

    查找可以替换的 images,有以下 3 处,共 2 个 image 需要替换

    docker search controller:v1.0.5

     NAME                                    DESCRIPTION                                     STARS     OFFICIAL   AUTOMATEDxyz349925756/ingress-nginx-controller   k8s.gcr.io/ingress-nginx/controller:v1.0.5      0                    v5cn/controller                         sync k8s.gcr.io/ingress-nginx/controller:v1.…   0
    

    docker search kube-webhook-certgen

     ...lianyuxue1020/kube-webhook-certgen   new pull lianyuxue1020/kube-webhook-certgen:…   0   ...
    

    分别替换以上找到的 image

    332 行

     image: v5cn/controller:v1.0.5 # xyz349925756/ingress-nginx-controller:v1.0.5 # registry.aliyuncs.com/google_containers/ingress-nginx/controller:v1.0.5@sha256:55a1fcda5b7657c372515    fe402c3e39ad93aa59f6e4378e82acd99912fe6028d
    

    614 行

      image: lianyuxue1020/kube-webhook-certgen:v1.1.1 # registry.aliyuncs.com/google_containers/ingress-nginx/kube-webhook-certgen:v1.1.1@sha256:64d8c73dca984af206adf9d6d7e46aa550362b1    d7a01f3a0a91b20cc6786866
    

    664 行

      image: lianyuxue1020/kube-webhook-certgen:v1.1.1 # registry.aliyuncs.com/google_containers/ingress-nginx/kube-webhook-certgen:v1.1.1@sha256:64d8c73dca984af206adf9d6d7e46aa550362b1    d7a01f3a0a91b20cc67868660
    

    另外 增加了 node 节点地址作为 externalIPs
    这个不是必须的!只是之前使用 NodePort 方式时留下的

    这个在文档 Bare-metal considerations 的 one could edit the ingress-nginx Service and add the following field to the object spec 这里的 Example
    暂时没有太明白用途

       externalIPs:# - 192.168.1.188- 192.168.1.185- 192.168.1.186-
    
  3. kubectl apply -f deploy.yaml

  4. 确认 ingress-nginx-controller
    kubectl get pods --namespace=ingress-nginx

     NAME                                        READY   STATUS      RESTARTS        AGEingress-nginx-admission-create--1-cb45t     0/1     Completed   0               4h13mingress-nginx-admission-patch--1-dbnm8      0/1     Completed   1               4h13mingress-nginx-controller-557c5d96d6-lrj85   1/1     Running     1 (4h12m ago)   4h13m
    

2、 local 测试

按照文档中 Local testing

  1. 创建一个简单的 httpd 网站和服务

    kubectl create deployment demo --image=httpd --port=80

    kubectl expose deployment demo

  2. 创建一个 ingress 资源

    kubectl create ingress demo-localhost --class=nginx
    –rule=demo.localdev.me/*=demo:80

  3. 端口转发:转发 ingress controller 的 80 端口,到localhost 的 8080 端口

    kubectl port-forward --namespace=ingress-nginx service/ingress-nginx-controller 8080:80

  4. 查询 ingress
    kubectl get ingress

    NAME CLASS HOSTS ADDRESS PORTS AGE

    demo-localhost nginx demo.localdev.me 192.168.1.185,192.168.1.186,192.168.1.241 80 4h14m

  5. curl 验证

    无需 localhost 模拟DNS 域名 demo.localdev.me,因为 kubectl port-forward 中按照 sevice 名称就可以找到 demo.localdev.me 对应的 Cluster 地址,并转发到 local 地址

    curl http://demo.localdev.me:8080/ 和 curl 127.0.0.1:8080 是一样的

    curl http://demo.localdev.me:8080/

     <html><body><h1>It works!</h1></body></html>
    

3、在线测试

按照文档中 Online testing
注意这里写着

It will be the EXTERNAL-IP field. If that field shows , this means that your Kubernetes cluster wasn’t able to provision the load balancer (generally, this is because it doesn’t support services of type LoadBalancer).

意思是如果环境不支持 LoadBalancer ,这个服务会一直 Pending

  1. 创建一个 ingress , host 设置为 www.demo.io

    kubectl create ingress demo --class=nginx
    –rule=“www.demo.io/*=demo:80”

  2. 查询 ingress 资源,现在有 2 个 ingress 了

    kubectl get ingress

     NAME             CLASS   HOSTS              ADDRESS                                     PORTS   AGEdemo             nginx   www.demo.io        192.168.1.185,192.168.1.186,192.168.1.241   80      4h11mdemo-localhost   nginx   demo.localdev.me   192.168.1.185,192.168.1.186,192.168.1.241   80      4h14m
    
  3. local 模拟 DNS
    模拟域名 www.demo.io 指向 ingress 的 ADDRESS (192.168.1.241),demo 服务地址是 ClusterIP ,不能给 Cluster 之外使用

    vim /etc/hosts

     127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4::1         localhost localhost.localdomain localhost6 localhost6.localdomain6# 127.0.0.1 centos7-188192.168.1.189 centos7-189192.168.1.188 centos7-188192.168.1.186 centos7-186192.168.1.185 centos7-185# ingress192.168.1.185 www.demo.io192.168.1.186 www.demo.io192.168.1.241 www.demo.io192.168.1.186  www.demo1.io192.168.1.186  www.demo1.io192.168.1.241  www.demo1.io192.168.1.240  www.demo1.io
    
  4. 查询服务 IP
    查询 ingress-nginx-controller 服务的 IP

    kubectl get service ingress-nginx-controller --namespace=ingress-nginx

     NAME                       TYPE           CLUSTER-IP       EXTERNAL-IP                                 PORT(S)                      AGEingress-nginx-controller   LoadBalancer   10.106.206.189   192.168.1.241,192.168.1.185,192.168.1.186   80:32423/TCP,443:30832/TCP   4h23m
    

    查询 demo 服务的 IP

    kubectl get svc

     NAME         TYPE           CLUSTER-IP       EXTERNAL-IP     PORT(S)        AGEdemo         ClusterIP      10.109.183.133   <none>          80/TCP         4h33m...
    
  5. curl 验证
    因为 demo 服务 的 IP 是 ClusterIP ,他没有EXTERNAL-IP , 所以
    curl http://www.demo1.io/. 可以,但是 curl 192.168.1.241 不可以

    curl http://www.demo.io/.

     <html><body><h1>It works!</h1></body></html>
    

4、测试之前 LoadBalancer 的 nginx 服务

前面 k8s学习: k8s学习: 使用 MetalLB 给测试环境配置LoadBalancer 服务 的时候,创建过一个 nginx 例子,现在拿来测试一下

  1. 创建一个 ingress 资源: demo1,域名 :www.demo1.io

    kubectl create ingress demo1 --class=nginx --rule=“www.demo1.io/*=demo1:80”

    现在有 3 个 ingress 资源了!

    kubectl get ingress

     NAME             CLASS   HOSTS              ADDRESS                                     PORTS   AGEdemo             nginx   www.demo.io        192.168.1.185,192.168.1.186,192.168.1.241   80      4h11mdemo-localhost   nginx   demo.localdev.me   192.168.1.185,192.168.1.186,192.168.1.241   80      4h14mdemo1            nginx   www.demo1.io       192.168.1.185,192.168.1.186,192.168.1.241   80      3h50m
    
  2. 查询服务的 IP

    kubectl get svc

     NAME         TYPE           CLUSTER-IP       EXTERNAL-IP     PORT(S)        AGEdemo         ClusterIP      10.109.183.133   <none>          80/TCP         4h33mdemo1        LoadBalancer   10.103.89.77     192.168.1.240   80:31590/TCP   4h51mkubernetes   ClusterIP      10.96.0.1        <none>          443/TCP        5h29m
    
  3. 修改 /etc/hosts ,加上 www.demo1.io 解析

  4. curl 验证

    因为 demo1 的 IP 是 LoadBalancer ,他拥有一个 EXTERNAL-IP
    所以,curl http://www.demo1.io/. 和 curl 192.168.1.240 是一样的

    curl 192.168.1.240
    curl http://www.demo1.io/.

     <!DOCTYPE html><html><head><title>Welcome to nginx!</title><style>html { color-scheme: light dark; }body { width: 35em; margin: 0 auto;font-family: Tahoma, Verdana, Arial, sans-serif; }</style></head><body><h1>Welcome to nginx!</h1><p>If you see this page, the nginx web server is successfully installed andworking. Further configuration is required.</p><p>For online documentation and support please refer to<a href="http://nginx.org/">nginx.org</a>.<br/>Commercial support is available at<a href="http://nginx.com/">nginx.com</a>.</p><p><em>Thank you for using nginx.</em></p></body></html>
    

5、删除 deploy 中增加的 node 节点地址作为 externalIPs ,对比一下

kubectl get service ingress-nginx-controller --namespace=ingress-nginx

NAME                       TYPE           CLUSTER-IP      EXTERNAL-IP     PORT(S)                      AGE
ingress-nginx-controller   LoadBalancer   10.105.20.144   192.168.1.241   80:31782/TCP,443:30630/TCP   11s

kubectl get ingress

NAME             CLASS   HOSTS              ADDRESS         PORTS   AGE
demo             nginx   www.demo.io        192.168.1.241   80      5h11m
demo-localhost   nginx   demo.localdev.me   192.168.1.241   80      5h14m
demo1            nginx   www.demo1.io       192.168.1.241   80      4h50m

kubectl get svc

NAME         TYPE           CLUSTER-IP       EXTERNAL-IP     PORT(S)        AGE
demo         ClusterIP      10.109.183.133   <none>          80/TCP         5h16m
demo1        LoadBalancer   10.103.89.77     192.168.1.240   80:31590/TCP   5h34m
kubernetes   ClusterIP      10.96.0.1        <none>          443/TCP        6h12m

这样子比较纯粹!不会再 redirest 到 node 地址,只有 LoadBalancer 的虚拟 IP !

k8s学习: Ingress Nginx相关推荐

  1. k8s 安装ingress nginx controller 并部署.net core ingress服务

    192.168.28.132 k8smaster 192.168.28.133 k8snode1 192.168.28.134 k8snode2 192.168.28.135 k8snode3 192 ...

  2. k8s学习-思维导图与学习笔记

    目录 前言 k8s思维导图 推荐 书籍 网站 课程 了解与安装 基础 资源调度 服务发布 配置管理 进阶 持久化存储 高级调度 高级 RBAC NetworkPolicy CKA 安全 前言 博主准备 ...

  3. ASP.NET Core on K8s学习之旅(14)Ingress灰度发布

    [云原生]| 作者/Edison Zhou 这是恰童鞋骚年的第236篇原创文章 上一篇介绍了Ingress的基本概念和Nginx Ingress的基本配置和使用,然后我还录了一个快速分享小视频介绍了一 ...

  4. k8s 集群 Ingress Nginx传递用户真实IP问题

    业务应用经常有需要用到用户真实ip的场景,比如:异地登录的风险预警.访问用户分布统计等功能等.当有这种需求的时候,在业务上容器过程中,如果用到ingress就要注意配置了.通常,用户ip的传递依靠的是 ...

  5. K8S ingress nginx 如何设置访问白名单

    K8S ingress nginx 设置访问白名单 前端无代理负载情况: apiVersion: extensions/v1beta1 kind: Ingress metadata:name: ing ...

  6. K8S学习--Kubeadm-4-测试运行Nginx+Tomcat

    K8S学习–Kubeadm 安装 kubernetes-1-组件简介 K8S学习–Kubeadm 安装 kubernetes-2-安装部署 K8S学习–Kubeadm-3-dashboard部署和升级 ...

  7. 文章目录 | .NET Core on K8s学习之旅 (更新至20200618)

    .NET Core on K8s学习之旅 更新记录: -- 20200511 增加Ingress & Nginx Ingress介绍 -- 20200515 增加Ocelot API网关集成示 ...

  8. ASP.NET Core on K8s学习之旅(13)Ocelot API网关接入

    [云原生]| 作者/Edison Zhou 这是恰童鞋骚年的第232篇原创文章 上一篇介绍了Ingress的基本概念和Nginx Ingress的基本配置和使用,考虑到很多团队都在使用Ocelot作为 ...

  9. K8S 学习笔记三 核心技术 Helm nfs prometheus grafana 高可用集群部署 容器部署流程

    K8S 学习笔记三 核心技术 2.13 Helm 2.13.1 Helm 引入 2.13.2 使用 Helm 可以解决哪些问题 2.13.3 Helm 概述 2.13.4 Helm 的 3 个重要概念 ...

  10. K8s学习进阶月刊第一期:Kubernetes and Cloud Native Meetup (北京站)...

    欢迎订阅K8s学习进阶月刊 干货资料尽情下载 线上直播: 直播主题内容 第一部分:混沌工程的背景和原理 第二部分:结合容器场景,介绍混沌工程的一些实践方法和常见工具 分享嘉宾:中亭 阿里巴巴高级技术专 ...

最新文章

  1. 卷积神经网络中的参数共享/权重复制
  2. linux架构师高级系统调优策略
  3. vs五子棋c语言代码,五子棋代码C语言版.doc
  4. 2020年六月份qq邮箱代收搜狐邮箱
  5. eclipse 中设置注释模板
  6. 从零开始刷Leetcode——数组(27.35.53)
  7. js定义入参_js函数传参类型
  8. 思维导图软件与团队协作
  9. CSDN上传设置资源积分的霸王条款
  10. [原创]IBM BLM模型思维导图
  11. 教你几招HASH表查找的方法
  12. 响应式网页上banner使用,unslider
  13. 关于DateTime.Now.Ticks
  14. Incorporating visual features into word embeddings:A bimodal autoencoder-based approach
  15. lougu T7983 大芳的逆行板载
  16. iOS进阶 - pod install 与 pod update 读这一篇就够了
  17. 正规python培训价格
  18. 华为p20云空间无法清理_华为P20 的安全和隐私功能原来这么好用!
  19. delphi 多线程详解及其详解例子
  20. K8S 安装 Metric-server

热门文章

  1. .Net 读取xml
  2. 训练赛20160403
  3. iOS UITabBarController
  4. Unix 网络编程 I/O 模型 第六章
  5. HDU 1166 - 敌兵布阵
  6. 记一次内存无法回收导致频繁fullgc机器假死的思路
  7. Promise.then(a, b)与Promise.then(a).catch(b)问题详解
  8. PAT——1054. 求平均值
  9. 软件工程 四则运算(结对编程)
  10. mongodb 的进库操作