NGINX Ingress的安装和使用

打印 上一主题 下一主题

主题 1740|帖子 1740|积分 5220

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

x
一、安装NGINX Ingress Controller

1.  安装helm
  1. curl https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bash
  2. helm repo add nginx-stable https://helm.nginx.com/stable
  3. helm repo update
复制代码
2. 安装IC
  1. # 安装
  2. kubectl create namespace ingress-nginx
  3. helm install my-release nginx-stable/nginx-ingress --set enableSnippets=true --set controller.service.type=NodePort  -n ingress-nginx  
  4. # 查看组件状态
  5. [root@kube-controller-manager ~]# kubectl get all
  6. NAME                                                       READY   STATUS    RESTARTS   AGE
  7. pod/my-release-nginx-ingress-controller-54f956cfd7-2lmtj   1/1     Running   0          17h
  8. NAME                                          TYPE           CLUSTER-IP     EXTERNAL-IP   PORT(S)                      AGE
  9. service/kubernetes                            ClusterIP      10.96.0.1      <none>        443/TCP                      4d22h
  10. service/my-release-nginx-ingress-controller   LoadBalancer   10.100.189.0   <pending>     80:31020/TCP,443:32145/TCP   17h
  11. NAME                                                  READY   UP-TO-DATE   AVAILABLE   AGE
  12. deployment.apps/my-release-nginx-ingress-controller   1/1     1            1           17h
  13. NAME                                                             DESIRED   CURRENT   READY   AGE
  14. replicaset.apps/my-release-nginx-ingress-controller-54f956cfd7   1         1         1       17h
复制代码
在这中间出了一个问题,报错open /proc/sys/net/ipv4/ip_unprivileged_port_start: no such file or directory: unknown,
经检查是Linux内核问题,我将内核升级到5.4解决问题
3. 暴露ingress-nginx服务

因为我这是在虚拟机上安装的,检查两个参数的设置

  • type: NodePort
  • externalTrafficPolicy: Cluster
    第二个参数确定集群中的每个节点的IP都可以访问到ingress的控制器,如果为Local只能部署IC的Pod所在节点IP能访问
查看服务
  1. [root@kube-controller-manager ~]# kubectl -n ingress-nginx get svc
  2. NAME                                  TYPE       CLUSTER-IP      EXTERNAL-IP   PORT(S)                      AGE
  3. my-release-nginx-ingress-controller   NodePort   10.109.66.211   <none>        80:30080/TCP,443:30935/TCP   2d2h
复制代码
在浏览器上访问 http://nodeIP:30080,应该出现404页面。表示IC可用。
二、Ingress的使用

这里展示如何使用ingress代理后端服务
1. 创建deploymet

kubectl create deployment kubernetes-bootcamp --image=jocatalin/kubernetes-bootcamp:v1
2. 为deployment创建服务

kubectl expose deployment/kubernetes-bootcamp --type="ClusterIP" --port 8080
3. 创建ingress

bootcamp_ingress.yaml
  1. apiVersion: networking.k8s.io/v1
  2. kind: Ingress
  3. metadata:
  4.   name: test-ingress
  5. spec:
  6.   ingressClassName: nginx
  7.   rules:
  8.     - host: kube.local
  9.       http:
  10.         paths:
  11.           - path: /v1/
  12.             pathType: Prefix
  13.             backend:
  14.               service:
  15.                 name: kubernetes-bootcamp
  16.                 port:
  17.                   number: 8080
复制代码
创建服务
kubectl applay -f bootcamp_ingress.yaml
创建域名映射

在客户端的hosts中添加
192.168.1.190  kube.local
4. 测试后端服务是否代理成功

在浏览器中访问 http://kube.local:30080/v1/
5. 启用https


  • 生成证书和私钥文件
  1. umask 077;openssl genrsa -out kube.local.key
  2. openssl req -new -x509 -key kube.local.key  -out kube.local.crt -subj /C=CN/ST=Hunan/L=Changsha/O=IT/CN=kube.loca
复制代码

  • 将证书写进secret
    kubectl create secret tls kube-local-ingress-secret --cert=kube.local.crt --key=kube.local.key
  • 修改ingress资源
    添加tls的配置
  1. spec:
  2.   ingressClassName: nginx
  3.   rules:
  4.   - host: kube.local
  5.     http:
  6.       paths:
  7.       - backend:
  8.           service:
  9.             name: kubernetes-bootcamp
  10.             port:
  11.               number: 8080
  12.         path: /v1/
  13.         pathType: Prefix
  14.   tls:
  15.   - hosts:
  16.     - kube.local
  17.     secretName: kube-local-ingress-secret
复制代码
访问http://kube.local:30080/v1/可用
6. 如何去掉域名后的端口

现在的域名kube.local:30080,不是默认的80端口号,是因为Kubernetes 的默认Node Port范围是30000-32767
我们将它改成80-32767
修改文件/etc/kubernetes/manifests/kube-apiserver.yaml
在 --service-cluster-ip-range下添加一行
  1. - --service-cluster-ip-range=10.96.0.0/12
  2.     - --service-node-port-range=80-3276
复制代码
修改IC的service文件,将nodePort改成80和443
  1. kubectl -n ingress-nginx  edit svc my-release-nginx-ingress-controller
  2. ports:
  3.   - name: http
  4.     nodePort: 80
  5.     port: 80
  6.     protocol: TCP
  7.     targetPort: 80
  8.   - name: https
  9.     nodePort: 443
  10.     port: 443
  11.     protocol: TCP
  12.     targetPort: 443
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

我爱普洱茶

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表