繁体   English   中英

在 Kubernetes 中顺序使用 Nginx Ingress 暴露服务

[英]Use Nginx Ingress sequentially in Kubernetes to expose service

我的 GKE 集群中有三个命名空间: nginx-global, nginx-a, app-a

kubectl create namespace nginx-global
kubectl label namespace nginx-global namespace-type=nginx-global

kubectl create namespace nginx-a
kubectl label namespace nginx-a project=a
kubectl label namespace nginx-a namespace-type=nginx

kubectl create namespace app-a
kubectl label namespace app-a project=a
kubectl label namespace app-a namespace-type=apps

现在我在命名空间nginx-globalnginx-a中安装了两个 nginx 入口控制器:

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

helm install ingress-nginx ingress-nginx/ingress-nginx --namespace nginx-global --set controller.scope.namespaceSelector="namespace-type=nginx"
helm install ingress-nginx-a ingress-nginx/ingress-nginx --namespace nginx-a --set controller.scope.namespaceSelector="namespace-type=apps,project=a" --set controller.service.type="ClusterIP" --set controller.ingressClassResource.name="nginx-a"

我在最后一个命名空间app-a中创建了一个虚拟应用程序:

apiVersion: v1
kind: Service
metadata:
  name: echo1
  namespace: app-a
spec:
  ports:
  - port: 80
    targetPort: 5678
  selector:
    app: echo1
  type: ClusterIP
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: echo1
  namespace: app-a
spec:
  selector:
    matchLabels:
      app: echo1
  replicas: 2
  template:
    metadata:
      labels:
        app: echo1
    spec:
      containers:
      - name: echo1
        image: hashicorp/http-echo
        args:
        - "-text=echo1"
        ports:
        - containerPort: 5678

现在,我的目标是通过中间的ingress-nginx-a ClusterIP 通过ingress-nginx LoadBalancer 公开虚拟应用程序。

为此,我首先在 Cloudflare *.example.com创建了一条指向 LoadBalancer IP 的 A 记录。 然后我使用了以下 Ingress 规则:

# For pointing from the first nginx ingress (ingress-nginx) to the second nginx ingress (ingress-nginx-a)

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: nginx2-ingress
  namespace: nginx-a
  annotations:
    kubernetes.io/ingress.class: "nginx"
    nginx.ingress.kubernetes.io/ssl-redirect: "false"
spec:
  rules:
  - host: "*.example.com"
    http:
        paths:
        - pathType: Prefix
          path: "/"
          backend:
            service:
              name: ingress-nginx-a-controller
              port:
                number: 80

#For pointing from the second nginx ingress (ingress-nginx-a) to the echo service

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: echo-ingress
  namespace: app-a
  annotations:
    kubernetes.io/ingress.class: "nginx-a"
    nginx.ingress.kubernetes.io/ssl-redirect: "false"
spec:
  rules:
  - host: "test.example.com"
    http:
        paths:
        - pathType: Prefix
          path: "/"
          backend:
            service:
              name: echo1
              port:
                number: 80

但是,我只是得到通常的“404 Not Found”nginx 错误。 你知道我做错了什么吗?

Nginx 入口可能会在所有安装中创建具有相同名称的集群角色绑定。 查看

kubectl get clusterrolebindings | grep ingress

因此,如果其中一个与另一个发生碰撞,这可能会导致另一个发生故障。 对于其他集群范围的资源也是如此

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM