k8s 部署ingress nginx

作者: bboysoul | 来源:发表于2019-08-20 20:30 被阅读0次
    image

    简介

    只是做记录,防止忘记。今天我们要实现的是文章图片上面这种访问方式.

    k8s 安装ingress nginx

    首先部署下面这个yaml档

    kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/master/deploy/static/mandatory.yaml

    大部分教程的做法都是直接输入命令,但是我喜欢先下载

    wget https://raw.githubusercontent.com/kubernetes/ingress-nginx/master/deploy/static/mandatory.yaml

    因为是在国内,所以你需要确定里面的镜像能不能下载到机器里,如果不行,推荐使用我下面这个方法

    https://www.bboysoul.com/2019/08/19/k8s%E5%85%8Dfq%E4%B8%8B%E8%BD%BD%E9%95%9C%E5%83%8F/

    下载完成镜像之后部署

    kubectl apply -f mandatory.yaml

    值得注意的是这个yaml档并不包含service,创建service要使用下面这个yaml档

    https://raw.githubusercontent.com/kubernetes/ingress-nginx/master/deploy/static/provider/baremetal/service-nodeport.yaml

    把这个yaml档下载到本地,之后查看内容

    apiVersion: v1
    kind: Service
    metadata:
      name: ingress-nginx
      namespace: ingress-nginx
      labels:
        app.kubernetes.io/name: ingress-nginx
        app.kubernetes.io/part-of: ingress-nginx
    spec:
      type: NodePort
      ports:
        - name: http
          port: 80
          targetPort: 80
          protocol: TCP
        - name: https
          port: 443
          targetPort: 443
          protocol: TCP
      selector:
        app.kubernetes.io/name: ingress-nginx
        app.kubernetes.io/part-of: ingress-nginx
    

    因为我们要实现文章图片上面这个状态,所以这个service还要写一个nodePort: 80和nodePort: 443字段,比如下面

    apiVersion: v1
    kind: Service
    metadata:
      name: ingress-nginx
      namespace: ingress-nginx
      labels:
        app.kubernetes.io/name: ingress-nginx
        app.kubernetes.io/part-of: ingress-nginx
    spec:
      type: NodePort
      ports:
        - name: http
          port: 80
          targetPort: 80
          nodePort: 80
          protocol: TCP
        - name: https
          port: 443
          targetPort: 443
          nodePort: 443
          protocol: TCP
      selector:
        app.kubernetes.io/name: ingress-nginx
        app.kubernetes.io/part-of: ingress-nginx
    

    在apply这个service之前,我们要注意的是我们的apiserver 默认的node port端口范围是30000-32767,但是我们所需要的nodeport端口不在这个范围之内,所以要修改apiserver的nodeport端口

    因为我是使用kubeadm搭建的集群,所以

    编辑下面这个文件,

    vim /etc/kubernetes/manifests/kube-apiserver.yaml

    在command下新增

    - --service-node-port-range=30-3000

    之后保存即可,apiserver会自动重启并且应用配置,修改完成一个节点之后,其他的master节点也需要修改,保证apiserver的配置相同

    接着应用这个yaml档即可

    最后查看这个svc是否正常

    kubectl get svc -A

    如果正常的话我们测试一下

    使用下面这个yaml档

    #deploy
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: nginx-ingress
    spec:
      selector:
        matchLabels:
          app: nginx-ingress
      replicas: 1
      template:
        metadata:
          labels:
            app: nginx-ingress
        spec:
          containers:
          - name: nginx-ingress
            image: nginx:1.15
            ports:
            - containerPort: 80
    ---
    #service
    apiVersion: v1
    kind: Service
    metadata:
      name: nginx-ingress
    spec:
      ports:
      - port: 80
        protocol: TCP
        targetPort: 80
      selector:
        app: nginx-ingress
    
    ---
    #ingress
    apiVersion: extensions/v1beta1
    kind: Ingress
    metadata:
      name: nginx-ingress
    spec:
      rules:
      - host: nginx.bboysoul.com
        http:
          paths:
          - path: /
            backend:
              serviceName: nginx-ingress
              servicePort: 80
    

    上面定义了三个对象一个是deployment,一个是service,最后一个是ingress ingress和service绑定,所以我们只要访问nginx.bboysoul.com就可以访问到这个deployment了

    kubectl apply -f ingress-nginx.yaml

    在外部dns里添加你k8smaster节点和nginx.bboysoul.com的解析,之后直接访问就可以了

    欢迎关注Bboysoul的博客www.bboysoul.com

    Have Fun

    相关文章

      网友评论

        本文标题:k8s 部署ingress nginx

        本文链接:https://www.haomeiwen.com/subject/frrdsctx.html