Kubernetes Ingress 学习

栏目: 编程工具 · 发布时间: 7年前

内容简介:Kubernetes 中暴露服务的方式有三种Kubernetes社区和Nginx公司都发布了一款叫做Nginx-ingress的Controller,它们之间的不同可以参考安装文件mandatory,需要增加hostNetwork属性,否则访问的时候总是有问题。

Kubernetes 中暴露服务的方式有三种

  • Loadbalancer 这种方式往往需要云供应商支持,或者本地F5等设备支持
  • NodePort 这种方式调用方通过NodeIP:NodePort 的方式访问服务,无法应对Pod发生迁移时的场景
  • Ingress Ingress是Kubernetes中的一种资源,通过这种资源提供了外部访问内部服务的通路,实现上是通过一个Pod加NodePort来实现的。通过Ingress,方便我们自己定义负载均衡。现在有很多种的Ingress支持,本文主要介绍Nginx的方案。

Kubernetes社区和Nginx公司都发布了一款叫做Nginx-ingress的Controller,它们之间的不同可以参考 Difference between two nginx-ingress 本文基于 Nginx-ingress Controller 做的实验。版本为 1.3.0。

Kubernetes 社区方案

安装

[root@devops-101 ~]# kubectl apply -f  https://raw.githubusercontent.com/kubernetes/ingress-nginx/master/deploy/mandatory.yaml
namespace/ingress-nginx created
configmap/nginx-configuration created
serviceaccount/nginx-ingress-serviceaccount created
clusterrole.rbac.authorization.k8s.io/nginx-ingress-clusterrole created
role.rbac.authorization.k8s.io/nginx-ingress-role created
rolebinding.rbac.authorization.k8s.io/nginx-ingress-role-nisa-binding created
clusterrolebinding.rbac.authorization.k8s.io/nginx-ingress-clusterrole-nisa-binding created
deployment.extensions/nginx-ingress-controller created
[root@devops-101 ~]# kubectl get pods --all-namespaces -l app.kubernetes.io/name=ingress-nginx --watch
NAMESPACE       NAME                                        READY     STATUS              RESTARTS   AGE
ingress-nginx   nginx-ingress-controller-664f488479-pr87w   0/1       ContainerCreating   0          5s
ingress-nginx   nginx-ingress-controller-664f488479-pr87w   0/1       Running   0         11s
ingress-nginx   nginx-ingress-controller-664f488479-pr87w   1/1       Running   0         16s
[root@devops-101 ~]# kubectl get all -n ingress-nginx
NAME                                            READY     STATUS    RESTARTS   AGE
pod/nginx-ingress-controller-664f488479-pr87w   1/1       Running   0          2m

NAME                                       DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/nginx-ingress-controller   1         1         1            1           2m

NAME                                                  DESIRED   CURRENT   READY     AGE
replicaset.apps/nginx-ingress-controller-664f488479   1         1         1         2m

安装文件mandatory,需要增加hostNetwork属性,否则访问的时候总是有问题。

配置tomcat和httpd

从我的 Github 上下载tomcat-deploy\httpd-deploy\tomcat-service\httpd-service几个文件,并分别部署。

再下载tomcat-ingress.yaml文件,进行部署。

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: tomcat-ingress
#  namespace: nginx-ingress
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /
spec:
  rules:
  - host: ingressweb.com
    http:
      paths:
      - path: /
        backend:
          serviceName: tomcat-service
          servicePort: 8080
      - path: /httpd
        backend:
          serviceName: httpd-service
          servicePort: 80

验证

上面的例子中,我配置的域名为 ingressweb.com ,在本地修改host,指向ingress-controller运行的节点,通过浏览器访问 http://ingressweb.com 可以看到 tomcat 的界面,通过 http://ingressweb.com/httpd 可以看到httpd的It Works!界面。

Kubernetes Ingress 学习

Nginxinc 的方案

看一下Nginx Ingress Controller的示意图

Kubernetes Ingress 学习

Nginx Ingress Controller 支持的功能

  • 暴露服务,一般有两种方式,通过不同的主机名(如 serviceA.com,serviceB.com)或者通过不同的URL(如 /serviceA 和 /serviceB)。
  • 配置SSL支持
  • TCP负载均衡
  • Url 重写

安装

首先需要有一个可以正常运行的Kubernetes环境,如果还没有,可以参考我的安装步骤 kubeadm安装kubernetes V1.11.1 集群

[root@devops-101 ~]# kubectl apply -f ingress-install.yaml 
namespace/nginx-ingress created
serviceaccount/nginx-ingress created
secret/default-server-secret created
configmap/nginx-config created
clusterrole.rbac.authorization.k8s.io/nginx-ingress configured
clusterrolebinding.rbac.authorization.k8s.io/nginx-ingress configured
deployment.extensions/nginx-ingress created
[root@devops-101 ~]# kubectl get pods -n nginx-ingress
NAME                             READY     STATUS    RESTARTS   AGE
nginx-ingress-767cc6477f-flj2f   1/1       Running   5          4m

实例

没有规则配置的时候,对于所有的请求默认都返回404状态。

[root@devops-101 ~]# kubectl apply -f cafe-example.yaml 
deployment.extensions/coffee created
service/coffee-svc created
deployment.extensions/tea created
service/tea-svc created
secret/cafe-secret created
ingress.extensions/cafe-ingress created
[root@devops-101 ~]# IC_IP=192.168.0.102
[root@devops-101 ~]# IC_HTTPS_PORT=31586
[root@devops-101 ~]# curl --resolve cafe.example.com:$IC_HTTPS_PORT:$IC_IP https://cafe.example.com:$IC_HTTPS_PORT/tea --insecure
Server address: 172.16.1.138:80
Server name: tea-7d57856c44-jxpvt
Date: 22/Oct/2018:11:37:47 +0000
URI: /tea
Request ID: 796e79e0280a27743cb682b8e893d6e9

Kubernetes Ingress 学习

参考资料

  1. Kubernetes ingress controller
  2. Github nginx ingress
  3. Difference between two nginx-ingress
  4. Kubernetes的负载均衡问题
  5. 初试Kubernetes暴露服务类型之Nginx Ingress
  6. Kubernetes Nginx Ingress
  7. Kubernetes Nginx Ingress教程

以上所述就是小编给大家介绍的《Kubernetes Ingress 学习》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Writing Apache Modules with Perl and C

Writing Apache Modules with Perl and C

Lincoln Stein、Doug MacEachern / O'Reilly Media, Inc. / 1999-03 / USD 39.95

Apache is the most popular Web server on the Internet because it is free, reliable, and extensible. The availability of the source code and the modular design of Apache makes it possible to extend Web......一起来看看 《Writing Apache Modules with Perl and C》 这本书的介绍吧!

Base64 编码/解码
Base64 编码/解码

Base64 编码/解码

XML、JSON 在线转换
XML、JSON 在线转换

在线XML、JSON转换工具