干货Kubernetes集群部署-Nginxingress-Controller

10次阅读

共计 2867 个字符,预计需要花费 8 分钟才能阅读完成。

Kubernetes 提供了两种内建的云端负载均衡机制用于发布公共应用,一种是工作于传输层的 Service 资源,它实现的是 TCP 负载均衡器;另一种是 Ingress 资源,它实现的是 HTTP(S) 负载均衡器。

今天我们来重点讨论 Ingress 资源。HTTP(S)负载均衡器是应用层负载均衡机制的一种,支持根据环境做出更好的调度决策。与传输层调度器相比,它提供了可自定义 URL 映射和 TLS 等功能,并支持多种健康状态检查机制。

Ingress 是 Kubernetes API 的标准资源类型之一,它其实就是一组基于 DNS 名称或 URL 路径把请求转发至指定的 Service 资源的规则,用于将集群外部的请求流量转发至集群内部完成服务发布。然而,Ingress 资源自身并不能进行“流量穿透”,它仅是一组路由规则的集合,这些规则要想真正发挥作用还需要其他功能的辅助,如监听某套接字,然后根据这些规则的匹配机制路由请求流量。这种能够为 Ingress 资源监听套接字并转发流量的组件称为 Ingress Controller。

一、部署 Helm

Helm 是一个包管理工具, 把 Kubernetes 资源 (比如 deployments、services 或 ingress 等) 打包到一个 chart 中,方便将其 chart 保存到 chart 仓库用来存储和分享, Helm 支持发布应用配置的版本管理, 使发布可配置, 简化了 Kubernetes 部署应用的版本控制、打包、发布、删除、更新等操作。

  • 安装 Helm

1、官网下载 Helm 二进制文件,当前最新版本为 2.14.0;

wget https://storage.googleapis.com/kubernetes-helm/helm-v2.14.0-linux-amd64.tar.gz

2、解压缩文件并将目录中二进制文件移动到 /usr/local/bin/ 下;

tar -zxvf helm-v2.14.0-linux-amd64.tar.gz
mv linux-amd64/helm /usr/local/bin/helm

3、为 Tiller 添加权限,详见 Role-based Access Control,新建 rbac-config.yaml,内容如下:

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 命令:

kubectl create -f rbac-config.yaml

4、初始化 Helm 并安装 Tiller 服务

helm init --upgrade --service-account tiller --tiller-image sapcc/tiller:v2.14.0

5、查看 helm 版本,出现以下信息,确认安装成功:

Client: &version.Version{SemVer:"v2.14.0", GitCommit:"8478fb4fc723885b155c924d1c8c410b7a9444e6", GitTreeState:"clean"}
Server: &version.Version{SemVer:"v2.14.0", GitCommit:"8478fb4fc723885b155c924d1c8c410b7a9444e6", GitTreeState:"clean"}

6、chart 列表

helm repo update

7、测试 chart 是否可用

helm search

二、使用 Helm 安装 nginx-ingress

  • 安装 nginx-ingress

1、执行 helm install 命令

helm install stable/nginx-ingress --name my-nginx --set rbac.create=true

–name:为安装的应用命名

2、查看 helm 列表

3、查看 ingress 的 service

kuberctl get svc

三、部署 nginx 实例应用

  • 部署 nginx 的 deployment

1、编辑 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

2、执行 create 创建命令

kubectl  create  -f  nginx-app.yaml

3、检测 deployment 部署情况

kubectl  get deployment  nginx-deployment
  • 为 nginx 的 deployment 创建 service

1、执行 expose 命令

kubectl expose deployment nginx-deployment --target-port=80 --port=80 --protocol=TCP --name=jdc-test

2、确认服务创建完成

kubectl  get  svc 

  • 为 service 创建 ingress

1、编辑 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

2、执行 create 创建命令

kubectl  create –f  ingress-nginx.yaml 

3、查看 ingress 部署情况

kubectl  get ingress

4、在客户端添加静态解析,公网 IP 是 nginx controller 的 service 公网 IP,域名是 ingress 的 host:test.nginx-ingress.jdc-test

5、浏览器输入 url http://test.nginx-ingress.jdc…

正文完
 0