内容简介: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 学习》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:- 一文读懂监督学习、无监督学习、半监督学习、强化学习这四种深度学习方式
- 学习:人工智能-机器学习-深度学习概念的区别
- 统计学习,机器学习与深度学习概念的关联与区别
- 混合学习环境下基于学习行为数据的学习预警系统设计与实现
- 学习如何学习
- 深度学习的学习历程
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
LINUX与UNIX Shell编程指南
David Tansley / 徐炎、张春萌 / 机械工业出版社 / 2000-6 / 38.00元
本书共分五部分,详细介绍了shell编程技巧,各种UNIX命令及语法,还涉及了UNIX下的文字处理以及少量的系统管理问题。本书内容全面、文字简洁流畅,适合Shell编程人员学习、参考。一起来看看 《LINUX与UNIX Shell编程指南》 这本书的介绍吧!