用户在 Kubernetes 上部署的服务一般运行于私有网络,Pod和Service 提供了 hostPort,NodePort等参数用于暴露这些服务端口到K8S节点上,供使用者访问。这样的方法有明显缺点:
1)容易占用过多的主机端口;
2)服务端口暴露到多台主机会增加防火墙和安全配置的难度
3)默认的hostPort,NodePort方式没有负载均衡的作用
K8S的 Ingress 资源提供了另一种服务暴露的方法,它可以获取各个服务的状态,传递给nginx等工具进行配置修改、重新加载等工作,实现负载均衡、虚拟主机、SSL等功能。并且它只需要占用一台主机的80、443、8080三个端口就可以为所有HTTP服务实现上述功能。
关于nginx ingress的安装,K8S有相关说明,网上也有很多文档可参考:
https://github.com/kubernetes/contrib/tree/master/ingress/controllers/nginx
apiVersion: v1 kind: Service metadata: name: gitlab-svc namespace: gitlab5 spec: ports: - port: 80 name: web selector: name: gitlab --- apiVersion: extensions/v1beta1 kind: Ingress metadata: name: git.mydomain.com namespace: gitlab5 spec: rules: - host: git.mydomain.com http: paths: - path: / backend: serviceName: gitlab-svc servicePort: 80