Nginx-ingress 安装

链接:https://kubernetes.github.io/ingress-nginx/

helm 安装

helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx
helm repo update

# 下载 nginx-ingress chart
helm pull ingress-nginx/ingress-nginx --untar

# 安装nginx-ingress
helm upgrade --install ingress-nginx ./ingress-nginx \
  --namespace ingress-nginx \
  --create-namespace \
  --set controller.kind=DaemonSet \
  --set controller.hostNetwork=true \
  --set controller.service.type=ClusterIP \
  --set controller.daemonset.useHostPort=true \
  --set controller.daemonset.hostPorts.http=80 \
  --set controller.daemonset.hostPorts.https=443 \
  --set controller.admissionWebhooks.enabled=true \
  --set controller.admissionWebhooks.patch.image.repository=registry.k8s.io/ingress-nginx/kube-webhook-certgen \
  --set controller.admissionWebhooks.patch.image.tag=v1.6.0 \
  --set controller.admissionWebhooks.patch.image.digest="" \
  --set controller.admissionWebhooks.create.image.repository=registry.k8s.io/ingress-nginx/kube-webhook-certgen \
  --set controller.admissionWebhooks.create.image.tag=v1.6.0 \
  --set controller.nodeSelector."kubernetes\.io/os"=linux \
  --set controller.tolerations[0].key=node-role.kubernetes.io/control-plane \
  --set controller.tolerations[0].effect=NoSchedule \
  --set controller.admissionWebhooks.create.image.digest=""

创建 nginx deployment 并 配置 ingres 路由

# 创建nginx dep和对应的svc
cat <<EOF | kubectl apply -f -
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-demo
spec:
  replicas: 2
  selector:
    matchLabels:
      app: nginx-demo
  template:
    metadata:
      labels:
        app: nginx-demo
    spec:
      containers:
      - name: nginx
        image: nginx:alpine
        ports:
        - containerPort: 80
        volumeMounts:
        - name: static-content
          mountPath: /usr/share/nginx/html
      volumes:
      - name: static-content
        configMap:
          name: nginx-html

---
apiVersion: v1
kind: ConfigMap
metadata:
  name: nginx-html
data:
  index.html: |
    <!DOCTYPE html>
    <html>
    <head>
      <title>Welcome to Nginx!</title>
    </head>
    <body>
      <h1>Hello from Nginx on K8s!</h1>
      <p>Host: ${HOSTNAME}</p>
    </body>
    </html>

---
apiVersion: v1
kind: Service
metadata:
  name: nginx-service
spec:
  selector:
    app: nginx-demo
  ports:
    - protocol: TCP
      port: 80
      targetPort: 80
EOF


# 配置 ingress  nginx 路由
cat <<EOF | kubectl apply -f -
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: nginx-ingress
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /
spec:
  ingressClassName: nginx
  rules:
  - host: "192-168-230-130.nip.io"   # nip.io 自动解析到 192.168.230.130
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: nginx-service
            port:
              number: 80
EOF



# 查看ingress规则
# k get ingress -A 
NAMESPACE   NAME            CLASS   HOSTS                          ADDRESS       PORTS   AGE
default     nginx-ingress   nginx   nginx.192.168.230.130.nip.io   10.96.1.228   80      23m

# 通过域名 nginx.192.168.230.130.nip.io 可以直接访问nginx
# curl nginx.192.168.230.130.nip.io
<!DOCTYPE html>
<html>
<head>
  <title>Welcome to Nginx!</title>
</head>
<body>
  <h1>Hello from Nginx on K8s!</h1>
  <p>Host: liulei-virtual-machine</p>
</body>
</html>