内容简介: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!界面。
Nginxinc 的方案
看一下Nginx Ingress Controller的示意图
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 学习》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:- 一文读懂监督学习、无监督学习、半监督学习、强化学习这四种深度学习方式
- 学习:人工智能-机器学习-深度学习概念的区别
- 统计学习,机器学习与深度学习概念的关联与区别
- 混合学习环境下基于学习行为数据的学习预警系统设计与实现
- 学习如何学习
- 深度学习的学习历程
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
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 编码/解码
XML、JSON 在线转换
在线XML、JSON转换工具