项目地址:
https://github.com/kubernetes/ingress-nginx
根据下表找到对应版本的ingress-nginx:
这里选择v1.6.4:
https://github.com/kubernetes/ingress-nginx/releases/tag/controller-v1.6.4

下载:https://github.com/kubernetes/ingress-nginx/archive/refs/tags/controller-v1.6.4.tar.gz
提取ingress-nginx-controller-v1.6.4.tar.gz\ingress-nginx-controller-v1.6.4\deploy\static\provider\baremetal下的deploy.yaml
搜索:Deployment,做一些修改:

kubectl apply -f deploy.yaml
注意:卸载ingress-nginx的方法:kubectl delete ns ingress-nginx
kubectl get pod -n ingress-nginx

创建ingress:
root@k8s-master1:~# cat ingress.yaml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: ingress-nginx
namespace: dev 名称空间要和service一样
spec:
ingressClassName: nginx
rules:
- host: nginx.example.com
http:
paths:
- backend:
service:
name: svc-nginx service的名字
port:
number: 8000 service的端口
path: /
pathType: Prefix
kubectl apply -f ingress.yaml
注意:
root@k8s-master1:~# kubectl apply -f ingress.yaml
Error from server (InternalError): error when creating "ingress.yaml": Internal error occurred: failed calling webhook "validate.nginx.ingress.kubernetes.io": failed to call webhook: Post "https://ingress-nginx-controller-admission.ingress-nginx.svc:443/networking/v1/ingresses?timeout=10s": context deadline exceeded
解决方法:
root@k8s-master1:~# kubectl get ValidatingWebhookConfiguration
NAME WEBHOOKS AGE
ingress-nginx-admission 1 33m
root@k8s-master1:~# kubectl delete -A ValidatingWebhookConfiguration ingress-nginx-admission
validatingwebhookconfiguration.admissionregistration.k8s.io "ingress-nginx-admission" deleted
root@k8s-master1:~# kubectl apply -f ingress.yaml
ingress.networking.k8s.io/ingress-nginx created
root@k8s-master1:~# kubectl get ing -n dev

root@k8s-master1:~# cat nginx-dp-svc-pvc.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
namespace: dev
labels:
app: nginx
spec:
replicas: 3
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- image: nginx
name: nginx
volumeMounts:
- name: nginx-pv-storage
mountPath: /usr/share/nginx/html
volumes:
- name: nginx-pv-storage
persistentVolumeClaim:
claimName: pvc-nginx
---
apiVersion: v1
kind: Service
metadata:
labels:
app: svc-nginx
name: svc-nginx
namespace: dev
spec:
ports:
- name: 8000-80
port: 8000
protocol: TCP
targetPort: 80
selector:
app: nginx
type: NodePort
kubectl apply -f nginx-dp-svc-pvc.yaml
root@k8s-master1:~# kubectl get all -n ingress-nginx
注意:
nginx-ingress-controller 服务是LoadBalancer 类型,一直pending
问题原因:自己搭建的k8s集群 (公有云环境除外),是没有LB能力的
解决方法:deploy.yaml里面将LoadBalancer换成NodePort,重新apply

hosts文件加个静态解析:
192.168.2.137nginx.example.com
或者
192.168.2.138 nginx.example.com
测试 :root@etcd3:~# curl nginx.example.com
hello,pv
root@etcd3:~#
Categories:
docker与kubernetes