前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >windows单机搭建k8s环境——部署ingress

windows单机搭建k8s环境——部署ingress

原创
作者头像
DifficultWork
修改2021-04-07 11:50:31
1.2K0
修改2021-04-07 11:50:31
举报
文章被收录于专栏:阶梯计划阶梯计划

前言

ingress是k8s对外暴露服务的一种方式。当我们使用购买的公有云服务时,平台已经提供部署好的ingress,用户只需要添加挂载策略即可。

对于自己搭建的k8s环境,如上一篇介绍,需要我们自己部署ingress。

外部通过ingress访问服务的工作流程如下:

用户 → ingress-nginx(pod) → ingress-nginx(controller控制器) → ingress →service → pod

这里面有ingress和ingress-controller的概念,简单理解就是:

ingress相当于把原来需要改nginx 配置,然后配置各种域名对应哪个 service的动作抽象出来,变成一个 ingress 对象(可以用 yaml 创建),每次不需要改nginx 了,直接修改 yaml 然后创建/更新就可以了。剩余就是nginx怎么处理的事情;

ingress-controller就是解决 “nginx怎么处理” 的;ingress-controller通过与k8s的API Server交互,动态的去感知集群中ingress 规则变化,读取并按照自己模板生成一段nginx 配置,再写到nginx pod 里,最后 reload。

k8s有多种类型的ingress-controller,这里用到的是官方的controller:https://github.com/kubernetes/ingress-nginx

部署

ingress的部署包含如下步骤

1、部署ingress controller

2、部署后端http服务(这里部署了mysql和phpmyadmin)

3、部署ingress-nginx service

4、创建ingress

1 部署ingress controller

根据自己的k8s版本查看对应的ingress-nginx版本,访问脚本仓,选择对应的k8s版本,获取ingress-nginx版本

进入ingress-nginx的代码仓地址,选择对应的版本下载到本地,一般部署文件在【deploy/static】或者【deploy/static/provider】下面。

安装并查看(PS:注意下80和443的端口是否被占用,默认会使用这两个作为http和https的端口)

代码语言:txt
复制
  kubectl apply -f mandatory.yaml
  kubectl apply -f cloud-generic.yaml

部署文件里面把ingress controller部署在ingress-nginx的命名空间下面

代码语言:txt
复制
  kubectl get pods -n ingress-nginx

浏览器访问localhost,会返回404.

2 部署后端服务

这里选择了mysql和phpmyadmin,主要平时用的比较多,可以在k8s的dashboard上进行部署,选择部署在default的命名空间。

2.1 部署mysql

为了使用方便把3306的端口暴露出来

2.2 部署phpmyadmin

暴露端口可以采用随机端口,phpmyadmin的缺省端口是80,所以目标端口设置为80

3 部署部署ingress-nginx service

正常情况下1.1做完后,ingress-nginx service已经部署在ingress-nginx的命名空间下面了,这个服务的类型是LoadBalancer(也可以改成NodePort),如果没有部署,可以用下面的yaml进行创建(保存为nginx-service.yaml,然后执行kubectl apply -f nginx-service.yaml):

代码语言:txt
复制
kind: Service
apiVersion: v1
metadata:
  name: ingress-nginx
  namespace: ingress-nginx
  labels:
    app.kubernetes.io/name: ingress-nginx
    app.kubernetes.io/part-of: ingress-nginx
spec:
  externalTrafficPolicy: Local
  type: LoadBalancer
  selector:
    app.kubernetes.io/name: ingress-nginx
    app.kubernetes.io/part-of: ingress-nginx
  ports:
    - name: http
      port: 80
      targetPort: http
    - name: https
      port: 443
      targetPort: https

---

部署完查看

代码语言:txt
复制
kubectl get service -n ingress-nginx

4 创建ingress

将ingress创建在default的命名空间,将之前的mysqladmin挂载上,部署文件如下(可以保存为ingress-default.yaml,然后执行kubectl apply -f ingress-default.yaml):

代码语言:txt
复制
apiVersion: extensions/v1beta1		# api版本
kind: Ingress		                  # 清单类型
metadata:			                    # 元数据
  name: ingress-default           # ingress的名称
  namespace: default              # 所属名称空间
  annotations:                    # 注解信息
    kubernetes.io/ingress.class: "nginx"
spec:                             # 规格
  rules:                          # 定义后端转发的规则
  - host: localhost               # 通过域名进行转发
    http:
      paths:       
      - path: /                   # 配置访问路径,如果通过url进行转发,需要修改;空默认为访问的路径为"/"
        backend:                  # 配置后端服务
          serviceName: mysqladmin
          servicePort: 80

---

由于mysqladmin的url就是根目录,所以访问路径设置为【/】

5 查验

完成后就可以通过ingress访问mysqladmin(这里的环境将ingress暴露为8080端口):

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 部署
    • 1 部署ingress controller
      • 2 部署后端服务
        • 2.1 部署mysql
        • 2.2 部署phpmyadmin
      • 3 部署部署ingress-nginx service
        • 4 创建ingress
          • 5 查验
          相关产品与服务
          容器服务
          腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档