ingress来实现端口暴露
一、大致的部署流程如下:
1)下载Ingress-controller相关的YAML文件,并给Ingress-controller创建独立的名称空间;
2)部署后端的服务,如myapp,并通过service进行暴露;
3)部署Ingress-controller的service,以实现接入集群外部流量;
4)部署Ingress,进行定义规则,使Ingress-controller和后端服务的Pod组进行关联。
二、Ingress与Service的关系?
1)通过ingress controller通过service实现pod的负载均衡。
2)支持TCP/UDP 4层和HTTP 7层。
用户--》ingress控制器定义的规则【Node上运行】-----》service ----》pod
wget https://raw.githubusercontent.com/kubernetes/ingress-nginx/master/deploy/static/mandatory.yaml
修改以下内容:
template:
metadata:
labels:
app.kubernetes.io/name: ingress-nginx
app.kubernetes.io/part-of: ingress-nginx
annotations:
prometheus.io/port: "10254"
prometheus.io/scrape: "true"
spec:
# wait up to five minutes for the drain of connections
hostNetwork: true #注意这里修改成服务器本身地址
terminationGracePeriodSeconds: 300
serviceAccountName: nginx-ingress-serviceaccount
containers:
- name: nginx-ingress-controller
image: 42.159.152.148/mydate/nginx-ingress-controller:0.20.0 #主要修改这个
1、controller启动以后,会监控宿主机服务器的80和443端口服务。
2、只有部署了controller的宿主机节点上,宿主机才有提供服务。
三、具体的演示步骤
[[email protected] demo]# more ingress.yaml
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: test-ingress
annotations:
ingress.kubernetes.io/rewrite-target: /
namespace: ingress-nginx
spec:
rules:
- host: foo.bar.com #包含了一个转发规则,将发往foo.bar.com的请求,代理给一个名字给nginx-service的Service的资源。
http:
paths:
- path: /
backend:
serviceName: nginx-service
servicePort: 80
[[email protected] demo]# kubectl get ingress -n ingress-nginx
NAME HOSTS ADDRESS PORTS AGE
test-ingress foo.bar.com 80 26s
1、rules:用于定义当前ingress资源的转发规则列表;当没有匹配到规则时,所有的流量都会转发由backend定义的默认后端。
2、backend:默认的后端用于服务那些没有匹配到规则的请求,定义ingress资源时,必须要定义banckend或rules两者之一,backend对象的定义由2个必要的字段组成:serviceName和servicePort,分别用于指定流量转发的后端目标Service资源名称和端口。
3.tls:目前支持通过默认端的443提供服务。
[[email protected] demo]# kubectl describe ingress test-ingress -n ingress-nginx
Name: test-ingress
Namespace: ingress-nginx
Address:
Default backend: default-http-backend:80 (<none>)
Rules:
Host Path Backends
---- ---- --------
foo.bar.com
/ nginx-service:31427 (<none>)
Annotations:
ingress.kubernetes.io/rewrite-target: /
Events: <none>
四、测试
1)本地绑定host
192.168.187.144 foo.bar.com #部署了ingress-controller的宿主机节点
2)访问 foo.bar.com:31427端口