Kubernetes通过deployment、service和ingress搭建应用

容器镜像:huangxjie/tomcat:0.0.1    该镜像只是一个简单的测试镜像,可以使用此镜像或者更换自己的镜像

deployment

首先讨论如果不使用deployment而是创建单个pod,当然这样是可以访问容器内的资源。但是万一此pod因为网络原因无法访问,那么项目就无法访问了,只能自己再创建新的pod重新部署应用。为了解决这个问题可以使用replicateSet来控制副本,这里使用deployment来控制副本数量。

使用deployment创建pod,deployment不仅可以控制pod副本的数量,deployment还有pod回滚,升级等功能

apiVersion: apps/v1    # #与k8s集群版本有关,使用 kubectl api-versions 即可查看当前集群支持的版本
kind: Deployment       # 资源类型为Deployment
metadata:          # 元数据,即 Deployment 的一些基本属性和信息
  name: hello-deployment  # Deployment 的名称
  labels:              # 标签,可以灵活定位一个或多个资源,其中key和value均可自定义,可以定义多组
    app: hello         # 为该Deployment设置key为app,value为hello的标签
spec:              # 这是关于该Deployment的描述          
  replicas: 3          # 使用该Deployment创建3个应用程序实例
  selector:            # 标签选择器
    matchLabels:       # 选择包含标签app:hello的资源 
      app: hello
  template:            # 这是选择或创建的Pod的模板
    metadata:            # Pod的元数据
      name: hello        # Pod的名称,K8s会在后面加上字符区分不同的Pod
      labels:            # Pod的标签,上面的selector即选择包含标签app:hello的Pod
        app: hello
    spec:              # 关于该Pod的描述    
      containers:        # container,与docker中的container是同一种
      - name: tomcat     # container的名称
        image: huangxjie/tomcat:0.0.1  # 使用我的测试镜像
        ports:
        - containerPort: 8080  # 容器访问端口

service

如果不使用service,可以直接访问pod从而访问应用。但是因为网络等因素导致pod被删除之后,虽然deployment能够保证副本的总数量,但是副本的名称和地址都会改变,如果在使用之前的地址访问就访问不到部署的应用,所以我们使用service来提供统一的对外接口。

apiVersion: v1        
kind: Service            # 资源类型为Service
metadata:
  name: hello-service    # 设置service的名称为hello-service
spec:                    # 关于该service的描述
  selector:              # 选择器
    app: hello             # 选择key为app,value为hello的pod
  type: NodePort         # service的类型设置为NodePort
  ports:               
    - port: 80           # 服务集群IP的端口号,<cluster ip>:port 是提供给集群内部客户访问service的入口
      targetPort: 8080   # 背后Pod的目标端口
      nodePort: 30002    # 通过集群节点的30123端口可以访问该服务,<nodeIP>:nodePort 是提供给集群外部客户访问service的入口

ingress

Ingress 是 Kubernetes 的一种 API 对象,将集群内部的 Service 通过 HTTP/HTTPS 方式暴露到集群外部,并通过规则定义 HTTP/HTTPS 的路由。Ingress 具备如下特性:集群外部可访问的 URL、负载均衡、SSL Termination、按域名路由(name-based virtual hosting)

apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  name: hello-ingress-for-hello  # Ingress 的名字,仅用于标识
spec:
  rules:                         # Ingress 中定义 L7 路由规则
  - host: hello.example.com      # 根据 virtual hostname 进行路由(请使用您自己的域名)
    http:
      paths:                     # 按路径进行路由
      - path: /
        backend:
          serviceName: hello-service  # 指定后端的 Service 为之前创建的 hello-service
          servicePort: 80

在集群内部可以通过http://<nodeIp>:nodePort/mavenWebDemo/访问刚才部署的应用,例如我们在搭建的虚拟机浏览器内输入地址,会得到刚刚部署的测试应用

上述这样访问只是在集群内部访问测试应用,如果我们在集群外,访问同样的地址,我们会发现,访问不到我们刚才的应用。

 从集群外部访问部署的应用,需要配置Ingress中配置的Host指向Ingress的IP地址,Linux系统可以在/etc/hosts文件中添加,Windows系统在C:\windows\system32\drivers\etc\hosts中添加ingress中hosts和nodeIp,这样集群外就可以通过这个地址访问应用了http://hello.example.com/mavenWebDemo/index.jsp

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值