Kubernetes提供了两种内建的云端负载均衡机制用于发布公共应用,一种是工做于传输层的Service资源,它实现的是TCP负载均衡器;另外一种是Ingress资源,它实现的是HTTP(S)负载均衡器。linux
今天咱们来重点讨论Ingress资源。HTTP(S)负载均衡器是应用层负载均衡机制的一种,支持根据环境作出更好的调度决策。与传输层调度器相比,它提供了可自定义URL映射和TLS等功能,并支持多种健康状态检查机制。nginx
Ingress是Kubernetes API的标准资源类型之一,它其实就是一组基于DNS名称或URL路径把请求转发至指定的Service资源的规则,用于将集群外部的请求流量转发至集群内部完成服务发布。然而,Ingress资源自身并不能进行“流量穿透”,它仅是一组路由规则的集合,这些规则要想真正发挥做用还须要其余功能的辅助,如监听某套接字,而后根据这些规则的匹配机制路由请求流量。这种可以为Ingress资源监听套接字并转发流量的组件称为Ingress Controller。api
1、部署Helm浏览器
Helm是一个包管理工具, 把Kubernetes资源(好比deployments、services或 ingress等) 打包到一个chart中,方便将其chart保存到chart仓库用来存储和分享, Helm支持发布应用配置的版本管理, 使发布可配置, 简化了Kubernetes部署应用的版本控制、打包、发布、删除、更新等操做。app
安装Helm负载均衡
一、官网下载Helm二进制文件,当前最新版本为2.14.0;工具
wget https://storage.googleapis.com/kubernetes-helm/helm-v2.14.0-linux-amd64.tar.gz
二、解压缩文件并将目录中二进制文件移动到/usr/local/bin/下;测试
tar -zxvf helm-v2.14.0-linux-amd64.tar.gz mv linux-amd64/helm /usr/local/bin/helm
三、为Tiller添加权限,详见Role-based Access Control,新建rbac-config.yaml,内容以下:google
apiVersion: v1 kind: ServiceAccount metadata: name: tiller namespace: kube-system --- apiVersion: rbac.authorization.k8s.io/v1beta1 kind: ClusterRoleBinding metadata: name: tiller roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: cluster-admin subjects: - kind: ServiceAccount name: tiller namespace: kube-system
执行create命令:url
kubectl create -f rbac-config.yaml
四、初始化 Helm 并安装 Tiller 服务
helm init --upgrade --service-account tiller --tiller-image sapcc/tiller:v2.14.0
五、查看helm版本,出现如下信息,确认安装成功:
Client: &version.Version{SemVer:"v2.14.0", GitCommit:"8478fb4fc723885b155c924d1c8c410b7a9444e6", GitTreeState:"clean"} Server: &version.Version{SemVer:"v2.14.0", GitCommit:"8478fb4fc723885b155c924d1c8c410b7a9444e6", GitTreeState:"clean"}
六、chart列表
helm repo update
七、测试chart是否可用
helm search
安装nginx-ingress
一、执行helm install命令
helm install stable/nginx-ingress --name my-nginx --set rbac.create=true
--name:为安装的应用命名
二、查看helm 列表
三、查看ingress的service
kuberctl get svc
3、部署nginx实例应用
部署nginx的deployment
一、编辑nginx-app.yaml文件
apiVersion: apps/v1 kind: Deployment metadata: name: nginx-deployment labels: app: nginx spec: replicas: 3 selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - name: nginx image: nginxdemos/hello:latest ports: - containerPort: 80
二、执行create建立命令
kubectl create -f nginx-app.yaml
三、检测deployment部署状况
kubectl get deployment nginx-deployment
为nginx的deployment建立service
一、执行expose命令
kubectl expose deployment nginx-deployment --target-port=80 --port=80 --protocol=TCP --name=jdc-test
二、确认服务建立完成
kubectl get svc
为service建立ingress
一、编辑 ingress-nginx.yaml文件
apiVersion: extensions/v1beta1 kind: Ingress metadata: name: jdc-ingress-controller-test annotations: metadata.annotations.kubernetes.io/ingress.class: "nginx" spec: rules: - host: test.nginx-ingress.jdc-test http: paths: - path: / backend: serviceName: jdc-test servicePort: 80
二、执行create建立命令
kubectl create –f ingress-nginx.yaml
三、查看ingress部署状况
kubectl get ingress
四、在客户端添加静态解析,公网IP是nginx controller的service公网IP,域名是ingress的host:test.nginx-ingress.jdc-test
五、浏览器输入url http://test.nginx-ingress.jdc-test/jdc-test访问测试
欢迎点击“连接”了解京东云更多精彩内容