nginx Ingress Controller Packaged by Bitnami
环境介绍
节点 | master01 | work01 | work02 |
主机/ip | calico-master01/192.168.195.135 | calico-master01/192.168.195.135 | calico-master01/192.168.195.135 |
版本 | 1.25.2 |
# 操作系统版本 root@calico-master01:~/bitnami-ingress# cat /etc/os-release PRETTY_NAME="Ubuntu 22.04.1 LTS" NAME="Ubuntu" VERSION_ID="22.04" VERSION="22.04.1 LTS (Jammy Jellyfish)" VERSION_CODENAME=jammy ID=ubuntu ID_LIKE=debian HOME_URL="https://www.ubuntu.com/" SUPPORT_URL="https://help.ubuntu.com/" BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/" PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy" UBUNTU_CODENAME=jammy
INSTALLATION
依赖项:需要安装helm,下文介绍的安装就是使用helm安装的。helm安装请参考链接:https://helm.sh/docs/intro/install/
安装ingress-controller
# 添加bitnami的helm仓库,并更新 helm repo add bitnami https://charts.bitnami.com/bitnami helm update # 把ingress-controller chart拉取到本地 helm pull bitnami/nginx-ingress-controller # 拉取下来的是一个压缩包 root@calico-master01:~/helm# ls nginx-ingress-controller-9.3.18.tgz # 解压缩 root@calico-master01:~/helm/helm# tar -xf nginx-ingress-controller-9.3.18.tgz root@calico-master01:~/helm/helm# ls nginx-ingress-controller nginx-ingress-controller-9.3.18.
# 备份默认values.yaml文件,并修改
cp nginx-ingress-controller/values.yaml nginx-ingress-controller/values-prod.yaml
vim nginx-ingress-controller/values-prod.yaml
# 修改以下几个地方
## 第一处是修改ingress-controller服务Deployment的NodeSelector;此处为了把资源部署到打了此标签的节点
404 nodeSelector: 405 kubernetes.io/os: linux 406 edgenode: 'true'
## 第二处是修改默认后端defaultBackend的NodeSelector;此处为了把资源部署到打了此标签的节点
725 nodeSelector: 726 kubernetes.io/os: linux 727 edgenode: 'true'
## 第三处修改ingress-controller服务service的类型,默认是LoadBalance
763 service: 764 ## @param service.type Kubernetes Service type for Controller 765 ## 766 # type: LoadBalancer 767 type: NodePort
# 执行helm install 安装
## 创建命名空间部署ingress-controller
kubectl create ns bitnami-ingress-nginx
## 节点打标签
kubectl label nodes calico-work02 edgnode=true
root@calico-master01:~/helm/helm# helm install myingress ./nginx-ingress-controller -f ./nginx-ingress-controller/values-prod.yaml --namespace bitnami-ingress-nginx
NAME: myingress LAST DEPLOYED: Fri Oct 21 05:36:26 2022 NAMESPACE: bitnami-ingress-nginx STATUS: deployed REVISION: 1 TEST SUITE: None NOTES: CHART NAME: nginx-ingress-controller CHART VERSION: 9.3.18 APP VERSION: 1.4.0 ** Please be patient while the chart is being deployed ** The nginx-ingress controller has been installed.
创建测试资源
# 创建测试资源的命名空间
kubectl create ns test-ns
# 创建httpd测试服务
kubectl apply -f httpd.yaml
root@calico-master01:~/ingress# cat httpd.yaml kind: Deployment apiVersion: apps/v1 metadata: name: web01 namespace: test-ns spec: replicas: 3 selector: matchLabels: app: httpd01 template: metadata: labels: app: httpd01 spec: containers: - name: httpd image: httpd:latest --- apiVersion: v1 kind: Service metadata: name: httpd-svc namespace: test-ns spec: selector: app: httpd01 ports: - protocol: TCP port: 80 targetPort: 80
# 创建tomcat测试服务 kubectl apply -f tomcat.yaml
root@calico-master01:~/ingress# cat tomcat.yaml kind: Deployment apiVersion: apps/v1 metadata: name: web02 namespace: test-ns spec: replicas: 3 selector: matchLabels: app: tomcat01 template: metadata: labels: app: tomcat01 spec: containers: - name: tomcat image: tomcat:8.5.45 --- apiVersion: v1 kind: Service metadata: name: tomcat-svc namespace: test-ns spec: selector: app: tomcat01 ports: - protocol: TCP port: 8080 targetPort: 8080
创建Ingress资源
kubectl apply -f bitnami-ingress.yaml
--- apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: bitnami-ingress namespace: test-ns annotations: nginx.ingress.kubernetes.io/use-regex: "true" nginx.ingress.kubernetes.io/rewrite-target: / spec: ingressClassName: nginx rules: - host: www.example.com http: paths: - backend: service: name: httpd-svc port: number: 80 path: / pathType: Prefix - backend: service: name: tomcat-svc port: number: 8080 path: /tomcat pathType: Prefix
访问httpd,tomcat应用验证Ingress规则
# 配置本地host域名解析 vim /etc/hosts
...
192.168.195.138 www.example.com
...
# curl命令调用httpd服务
root@calico-master01:~/bitnami-ingress# curl -I www.example.com:30688 HTTP/1.1 200 OK Date: Fri, 21 Oct 2022 06:19:51 GMT Content-Type: text/html Content-Length: 45 Connection: keep-alive Last-Modified: Mon, 11 Jun 2007 18:53:14 GMT ETag: "2d-432a5e4a73a80" Accept-Ranges: bytes
# curl命令调用tomcat服务
root@calico-master01:~/bitnami-ingress# curl -I www.example.com:30688/tomcat
HTTP/1.1 200
Date: Sat, 22 Oct 2022 08:29:08 GMT
Content-Type: text/html;charset=UTF-8
Connection: keep-alive
本地window浏览器访问
需先配置C:\Windows\System32\drivers\etc文件
添加域名与主机的对应关系,这里我这个ip是work02的主机IP
访问http服务
访问tomcat
问题解决:
第一次curl命令执行的时候报错了503
查看ingress-controller的日志
显示ingress的规则没有匹配上,"Error obtaining Endpoints for Service "bitnami-ingress-nginx/httpd-svc": no object matching key "bitnami-ingress-nginx/httpd-svc" in local store",应该是我第一次编辑的ingress的yaml文件,metadata指定的namespace是bitnami-ingress-nginx,而此命名空间底下并没有httpd-svc,所以问题解决就是kubectl delete -f bitnami-ingress.yaml 删掉bitnami-ingress-nginx命名空间下的ingress,修改bitnami-ingress.yaml,把namespace的值改成httpd-svc一样的test-ns,再kubectl apply -f bitnami-ingress.yaml
再看看ingress-controller的日志
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了