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的日志

 

 

 
posted @ 2022-10-21 16:26  高佳丰  阅读(259)  评论(0编辑  收藏  举报