通常情况下,service和pod仅可在集群内部网络中通过IP地址访问。所有到达边界路由器的流量或被丢弃或被转发到其他地方。从概念上讲,可能像下面这样:
Ingress是授权入站连接到达集群服务的规则集合。
你可以给Ingress配置提供外部可访问的URL、负载均衡、SSL、基于名称的虚拟主机等。用户通过POST Ingress资源到API server的方式来请求ingress。 Ingress controller负责实现Ingress,通常使用负载平衡器,它还可以配置边界路由和其他前端,这有助于以HA方式处理流量。
在使用Ingress resource之前,有必要先了解下面几件事情。Ingress是beta版本的resource,在kubernetes1.1之前还没有。你需要一个Ingress Controller来实现Ingress,单纯的创建一个Ingress没有任何意义。
GCE/GKE会在master节点上部署一个ingress controller。你可以在一个pod中部署任意个自定义的ingress controller。你必须正确地annotate每个ingress,比如 运行多个ingress controller 和 关闭glbc.
确定你已经阅读了Ingress controller的beta版本限制。在非GCE/GKE的环境中,你需要在pod中部署一个controller。
Kubernetes 实战 通过deployment控制器 部署自己的应用程序
如何构建ingress-controller?
Kubernetes 如何创建ingress tls secret?
ingress.yml 地址
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: restapi
annotations:
kubernetes.io/ingres.class: "nginx" # 制定使用的代理类型
spec:
rules:
- host: restapi.test.com # 内网环境的测试,可以根据 云环境、自定义环境配置
http:
paths:
- path: /swagger
backend:
serviceName: restapi
servicePort: 8080
# tls 为自签名证书
tls:
- hosts:
- restapi.test.com
secretName: rest-tls
使用kubectl 创建
kubectl apply -f ingress.yml
使用rancer 创建ingress:
使用kubectl 查看
> kubectl get ing -n restapi
NAME HOSTS ADDRESS PORTS AGE
restapi restapi.test.com 172.31.189.102 80, 443 8m
使用 rancher 查看:
使用kubectl 查看详情:
kubectl describe ingress -n restapi
Name: restapi
Namespace: restapi
Address: 172.31.189.102
Default backend: default-http-backend:80 ()
TLS:
rest-tls terminates restapi.test.com
Rules:
Host Path Backends
---- ---- --------
restapi.test.com
/swagger restapi:8080 ()
Annotations:
field.cattle.io/publicEndpoints: [{"addresses":["172.31.189.102"],"port":443,"protocol":"HTTPS","serviceName":"restapi:restapi","ingressName":"restapi:restapi","hostname":"restapi.test.com","path":"/swagger","allNodes":true}]
kubectl.kubernetes.io/last-applied-configuration: {"apiVersion":"extensions/v1beta1","kind":"Ingress","metadata":{"annotations":{"kubernetes.io/ingres.class":"nginx"},"name":"restapi","namespace":"restapi"},"spec":{"rules":[{"host":"restapi.test.com","http":{"paths":[{"backend":{"serviceName":"restapi","servicePort":8080},"path":"/swagger"}]}}],"tls":[{"hosts":["restapi.test.com"],"secretName":"rest-tls"}]}}
kubernetes.io/ingres.class: nginx
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal CREATE 10m nginx-ingress-controller Ingress restapi/restapi
Normal UPDATE 9m (x2 over 9m) nginx-ingress-controller Ingress restapi/restapi