目的

实现用ingress-nginx访问集群内部的nginx

备注

此版本只是初步实现,先入门在研究。

步骤

安装ingress-controller(版本0.3.0)

  1. 新建文件夹
    mkdir ingress-nginx-test

  2. 下载
    https://github.com/kubernetes/ingress-nginx/tree/nginx-0.30.0/deploy/static
    https://github.com/kubernetes/ingress-nginx/tree/nginx-0.30.0/deploy/static/provider/baremetal
    mandatory.yaml
    service-nodeport.yaml

  3. 部署ingress-controller
    kubectl apply -f mandatory.yaml
    kubectl apply -f service-nodeport.yaml

  4. 查看ingress-controller状态
    kubectl get pod -n ingress-nginx
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7ySB3Z9f-1616041661997)(/uploads/sqwfw/images/m_64cc81ee089dbcf5a066772a5871474c_r.png)]

  5. 查看service状态
    kubectl get service -n ingress-nginx
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1ENoiC76-1616041662000)(/uploads/sqwfw/images/m_6ec9bba270273de948e9c4b65bbd6dde_r.png)]

  6. 访问service
    本机ip+service端口号
    我这里是http://10.202.254.xxx:31057/
    看到的是404,此时证明你的ingress已经安装好了。

  7. 备注
    我在安装ingress-controller的时候遇见过一些问题
    https://github.com/kubernetes/ingress-nginx/issues/4296
    后来我的解决方式是更改了ingress-nginx的版本号,之前是0.25.0改成了0.3.0,问题就解决了。具体为什么我也不太知道以后慢慢学吧。
    如果你也遇见了问题可以看一下nginx-ingress-controller的日志google一下。
    kubectl logs -n ingress-nginx nginx-ingress-controller-5bb8fb4bb6-gl6dj

  8. 部署nginx应用
    另外新建一个nginx-app文件夹
    cd … & mkdir nginx-app

namespace.yaml

apiVersion: v1
kind: Namespace
metadata:
  name: ns-nginx

deploy.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  namespace: ns-nginx
  name: nginx-deployment
spec:
  selector:
    matchLabels:
      app: nginx
  replicas: 2
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:alpine
        ports:
        - containerPort: 80

service.yaml

apiVersion: v1
kind: Service
metadata:
  name: nginx-service
  namespace: ns-nginx
spec:
  selector:
    app: nginx
  type: ClusterIP
  ports:
  - protocol: TCP
    port:  8080
    targetPort: 80

重点注意一下这里service对外暴露的是8080端口
kubectl apply -f namespacet.yaml
kubectl apply -f deploy.yaml
kubectl apply -f service.yaml

  1. 查看ngixn应用状态
    get all -n ns-nginx -o wide
    用另外一台机器curl service的ip和端口号
    curl http://ip:8080
    如果你看到nginx的欢迎页面说明这时候说明你的nginx应用已经部署成功

  2. 配置ingress
    cd …/ingress-nginx-test
    vim ingress-nginx.yaml

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: ingress-nginx
  namespace: ns-nginx
  annotations:
    kubernets.io/ingress.class: "nginx"
spec:
  rules:
  - host: testingress.com
    http:
      paths:
      - path:
        backend:
          serviceName: nginx-service
          servicePort: 8080

从配置可以清晰的看出来就是将 testingress.com的请求转发到nginx-service这个service的8080端口

kubectl apply -f ingress-nginx.yaml 
  1. 配置host文件
    我的机器是mac,配host文件自行google
    sudo vim /etc/hosts
    添加
服务器ip testingress.com
  1. 最终测试
    http://testingress.com:31057
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-G0W23goj-1616041662002)(/uploads/sqwfw/images/m_0691603c349eb25d8cd2f22c60c6bd64_r.png)]

如果你和我一样,说明你成功了!

  1. 结束
    这是最基础的入门,可以用在生产环境但肯定不是最佳实践,继续学习。
Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐