kubernetes配置和使用ingress-nginx

项目地址:

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