温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

k8s中ingress的安装方法

发布时间:2021-07-07 16:55:01 来源:亿速云 阅读:234 作者:chen 栏目:云计算

这篇文章主要讲解了“k8s中ingress的安装方法”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“k8s中ingress的安装方法”吧!

在Kubernetes中,服务和Pod的IP地址仅可以在集群网络内部使用,对于集群外的应用是不可见的。为了使外部的应用能够访问集群内的服务,在Kubernetes 目前 提供了以下几种方案:
1.NodePort

    NodePort 服务是暴露服务的最原始方式。 顾名思义,NodePort 会在所有节点(VM)上打开一个特定的端口,并且发送到此端口的任何流量都将转发到该服务。 这种方式主要有以下缺点:

  • 每个端口只能有一个服务

  • 默认您只能使用端口30000-32767

基于以上原因,我不建议在生产环境上用这种方式暴露服务。如果你运行的服务不要求一直可用,或者对成本比较敏感,你可以使用这种方法。这样的应用的最佳例子是 demo 应用,或者某些临时应用。

2.LoadBalancer

LoadBalancer 服务是暴露服务到 internet 的标准方式。这种方式会启动一个 Network Load Balancer,它将给你一个单独的 IP 地址,转发所有流量到你的服务。

如果你想要直接暴露服务,这就是默认方式。所有通往你指定的端口的流量都会被转发到对应的服务。它没有过滤条件,没有路由等。这意味着你几乎可以发送任何种类的流量到该服务,像 HTTP,TCP,UDP,Websocket,gRPC 或其它任意种类。

这个方式的最大缺点是每一个用 LoadBalancer 暴露的服务都会有它自己的 IP 地址,每个用到的 LoadBalancer 都需要付费,这将是非常昂贵的。

3.Ingress

有别于以上所有例子,Ingress 事实上不是一种服务类型。相反,它处于多个服务的前端,扮演着“智能路由”或者集群入口的角色。

你可以用 Ingress 来做许多不同的事情,各种不同类型的 Ingress 控制器也有不同的能力。

默认 ingress 控制器是启动一个 HTTP(S) Load Balancer[3]。它允许你基于路径或者子域名来路由流量到后端服务。例如,你可以将任何发往域名 foo.yourdomain.com 的流量转到 foo 服务,将路径 yourdomain.com/bar/path 的流量转到 bar 服务。

基于以上情况,建议各位还是采用Ingress。以下是我基于1.20版本的安装实操

步骤1:

下载mandatory.yaml和service-nodeport.yaml,mandatory.yaml主要是安装nginx-ingress-controller( 具体实现反向代理及负载均衡的程序,对ingress定义的规则进行解析,根据配置的规则来实现请求转发 )。service-nodeport.yaml主要是负责对外提供服务,如果不需要可以不下载(service-nodeport其实就是个简单的service服务需要对外服务需要开通个nodePort即可让外部访问k8s内部服务,具体我们后面再讲)

下载mandatory.yaml,下载地址是:https://github.com/kubernetes/ingress-nginx/tree/nginx-0.30.0/deploy/static

k8s中ingress的安装方法

下载完成后我们需要对mandatory.yaml进行简单的修改

1、将文件中的rbac.authorization.k8s.io/v1beta1 替换成 rbac.authorization.k8s.io/v1 原因是1.20版本已经v1beta1版本已经过期,所以最好是改成v1不然会告警或报错。

2、设置k8s使用主机网络(可选)

这里需要注意的是如果是自己服务器(非啊里云,腾讯云等云服务器,配置成 Network 之后是可以不需要创建一个nodePort的svc, 而是直接在每个节点都创建一个ingress-controller的容器,而且将该容器的网络模式设为hostNetwork。也就是说每个节点物理机的80和443端口将会被ingress-controller中的nginx容器占用。当流量通过80/443端口进入时,将直接进入到nginx中。而后nginx根据ingress规则再将流量转发到对应的web应用容器中。 上面的service-nodeport.yaml文件是可以不下载的),我这边测试,所以也设置成netWork模式

k8s中ingress的安装方法

3、安装

    运行kubectl apply -f mandatory.yaml

k8s中ingress的安装方法

出现以下界面表示安装成功,如果失败可以kubectl delete -f mandatory.yaml清空已安装的pod和configmap,然后根据实际报错修改mandatory.yaml再重试

大家留意这张图,如果hostNetwork设置为true红色框框部分显示的就是你自己的主机IP(真实IP),如果不设置则会显示虚拟IP(10.***这种)我因为是啊里云服务器所以这里的IP显示的是啊里云的内网IP 172.23.78.148。

k8s中ingress的安装方法

下载service-nodeport.yaml 地址是:https://github.com/kubernetes/ingress-nginx/tree/nginx-0.30.0/deploy/static/provider/baremetal

k8s中ingress的安装方法

修改service-nodeport.yaml,因为我们需要外部进行访问以必须要开通个nodePort红色框框部分就是我们对外的端口,端口我随便弄的。

k8s中ingress的安装方法

安装service

kubectl apply -f service-nodeport.yaml

k8s中ingress的安装方法

看到以下信息表示运行成功,这里可以看到我们访问30080映射的是内部80端口,30443映射的是443端口

我们在浏览器上输入http://{服务器外网IP}:30080/会显示以下界面

k8s中ingress的安装方法

这表示ingress已经成功安装。

为了看演示效果,我们可以下个tomcat镜像来测试下

docker search tomcat

k8s中ingress的安装方法

我们挑选个tomcat安装一下

docker pull tomcat

k8s中ingress的安装方法

编写tomcat-demo脚本

cat >>~/tomcat-demo.yaml <<EOF
apiVersion: v1
kind: Service
metadata:
  name: tomcat
  namespace: default
spec:
  selector:
    app: tomcat
    release: canary
  ports:
  - name: http
    port: 8080
    targetPort: 8080
  - name: ajp
    port: 8009
    targetPort: 8009
 
---
apiVersion: apps/v1
kind: Deployment
metadata: 
  name: tomcat-deploy
spec:
  replicas: 1
  selector: 
    matchLabels:
      app: tomcat
      release: canary
  template:
    metadata:
      labels:
        app: tomcat
        release: canary
    spec:
      containers:
      - name: tomcat
        image: tomcat:latest
        ports:
        - name: httpd
          containerPort: 8080
        - name: ajp
          containerPort: 8009
EOF

运行脚本

kubectl apply -f tomcat-demo.yaml

看到以下界面表示tomcat服务成功启动

k8s中ingress的安装方法

然后我们创建个ingress测试

cat >>~/tomcat-ingress.yaml <<EOF
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: ingress-tomcat
  namespace: default
  annotations: 
    kubernets.io/ingress.class: "nginx"
spec:
  rules:
  - http:
      paths:
      - path: /t1/
        backend:
          serviceName: tomcat
          servicePort: 8080
EOF

运行脚本

kubectl apply -f tomcat-ingress.yaml

运行kubectl get ingress 看到以下界面表示ingress资源创建成功

k8s中ingress的安装方法

这时我们在浏览器上输入http://{服务器外网IP}:30080/t1/会显示以下界面

k8s中ingress的安装方法

感谢各位的阅读,以上就是“k8s中ingress的安装方法”的内容了,经过本文的学习后,相信大家对k8s中ingress的安装方法这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是亿速云,小编将为大家推送更多相关知识点的文章,欢迎关注!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI