标签:net name deploy res 访问 erp nta ports 图片
作者:李毓我们都知道,K8S中暴露service的一般有3种方式
第一种方式一般是用在云上的,比如亚马逊云,第二种是自带的暴露方式,这两种方式存在两个问题:
第一,一个服务只能一个端口使用,端口需要提前规划,如果服务很多,那么管理端口会成为一件头疼的事情。
第二,只支持4层负载,对于业务的多样化要求,无法很好的满足。
所以就出现了第三种方式,ingress的出现就是为了解决前两种的不足之处的。
ingress分为两个组件,一个是ingress,一个是ingress-controller,其中ingress创建规则,ingress-controller负责部署
从上图我们可以看出ingress通过service关联,并且由ingress-controller实现了负载均衡。优点是他很好的支持了TCP/UDP的4层和7层。
ingress-controller有很多种实现,我们这里采用官方维护的nginx控制器。
首先我们来github找到你需要的版本
https://github.com/kubernetes/ingress-nginx/releases
这里我们选择最新的2.11版本
https://github.com/kubernetes/ingress-nginx/archive/ingress-nginx-2.11.3.tar.gz
这个with-rbac.yaml有个坑,需要通过宿主机网络hostNetwork方式暴露出去,相比nodeport的话性能会更好一些,不知道为什么这个坑从来没被填上。我们在这个位置加上。
还有一个坑爹的地方要改,官网已经说了,apiversion版本要对好。
把default-backend.yaml和with-rbac.yaml的apiversion改成apps/v1
然后对这7个yaml文件apply一下
然后创建一个service
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx
spec:
replicas: 2
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx
ports:
- containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
name: nginx
labels:
app: nginx
spec:
type: NodePort
ports:
- port: 80
targetPort: 80
nodePort: 30112
selector:
app: nginx
接下来创建ingress规则
---
# http
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
name: example-ingress
spec:
rules:
- host: example.carp.com
http:
paths:
- path: /
backend:
serviceName: nginx
servicePort: 80
---
# https
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
name: tls-example-ingress
spec:
tls:
- hosts:
- sslexample.carp.com
secretName: secret-tls
rules:
- host: sslexample.carp.com
http:
paths:
- path: /
backend:
serviceName: nginx
servicePort: 80
可以看到80和443端口已经起来了
接着绑定本地hosts访问
192.168.1.106 example.carp.com
这样ingress暴露就算完成了。
标签:net name deploy res 访问 erp nta ports 图片
原文地址:https://blog.51cto.com/14783669/2521986