无法连接到入口 k8s 后面的 mongo-express

时间:2021-04-13 12:16:27

标签: mongodb kubernetes kubernetes-ingress mongo-express

我正在尝试创建以下内容:

  1. Deployment 用于 mongo
  2. Deployment 用于 mongo-express
  3. ClusterIp 用于 mongo
  4. ClusterIp 用于 mongo-express
  5. 将请求路由到 mongo-express 的入口服务

我希望能够前往 xyz.com/admin/auth-db-gui 并查看 mongo-express gui。

我在 Linux minikube 上运行它。

转到 xyz.com/admin/auth-db-gui 时,我收到 503 Service Temporously Unavailable,但是在执行 kubectl get pods 时,我可以看到 2 个 Pod 正在运行。

我将手动为 xyz.com 中的 /etc/hosts 设置映射,因为这仅用于开发目的

db.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: auth-db-deployment
spec:
  selector:
    matchLabels:
      app: auth-db
  template:
    metadata:
      labels:
        app: auth-db
    spec:
      containers:
        - name: auth-db
          image: mongo
---
apiVersion: v1
kind: Service
metadata:
  name: auth-db-service
spec:
  selector:
    app: auth-db
  ports:
    - name: auth-db
      protocol: TCP
      port: 27017
      targetPort: 27017

db-gui

apiVersion: apps/v1
kind: Deployment
metadata:
  name: auth-db-gui-deployment
spec:
  selector:
    matchLabels:
      app: auth-db-gui
  template:
    metadata:
      labels:
        app: auth-db-gui
    spec:
      containers:
        - name: auth-db-gui
          image: mongo-express
          env:
            - name: ME_CONFIG_MONGODB_SERVER
              value: auth-db-service
---
apiVersion: v1
kind: Service
metadata:
  name: auth-db-gui-service
spec:
  selector:
    app: auth-db-gui
  ports:
    - name: auth-db-gui
      protocol: TCP
      port: 27017
      targetPort: 27017

ingress.yaml

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: xyz-ingress
  annotations:
    kubernetes.io/ingress.class: nginx
    nginx.ingress.kubernetes.io/use-regex: "true"
spec:
  rules:
    - host: xyz.com
      http:
        paths:
          - path: /admin/auth-db-gui
            backend:
              serviceName: auth-db-gui-service
              servicePort: 8081

如果上面有明显的错误,请见谅。

1 个答案:

答案 0 :(得分:1)

我注意到 some cases 中的 503 表示端口配置正确。

我已经测试了您的入口以及服务和部署,在用入口对象中的端口纠正错误后,它运行良好:

curl -H "Host:  xyz.com"  "192.168.49.2/admin/auth-db-gui"   
{
  "path": "/admin/auth-db-gui",
  "headers": {
    "host": "xyz.com",
    "x-request-id": "ff272df6d729af6c1fb4d5f510de88f4",
    "x-real-ip": "192.168.49.1",
    "x-forwarded-for": "192.168.49.1",
    "x-forwarded-host": "xyz.com",
    "x-forwarded-port": "80",
    "x-forwarded-proto": "http",
    "x-scheme": "http",
    "user-agent": "curl/7.52.1",
    "accept": "*/*"
  },
  "method": "GET",
  "body": "",
  "fresh": false,
  "hostname": "xyz.com",
  "ip": "192.168.49.1",
  "os": {
    "hostname": "auth-db-gui-deployment-555c77cf75-fjbf2"

出于测试目的,我强烈推荐mendhak/http-https-echo。我交换了您部署中的映像并修复了端口。您可以使用以下 yaml 文件自行测试入口:

#ingress.yaml

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: xyz-ingress
  annotations:
    kubernetes.io/ingress.class: nginx
    nginx.ingress.kubernetes.io/use-regex: "true"
spec:
  rules:
    - host: xyz.com
      http:
        paths:
          - path: /admin/auth-db-gui
            backend:
              serviceName: auth-db-gui-service
              servicePort: 27017

注意端口的设置方式。 ingress 中的 servicePort 对应服务 port,即 27017。由于 echo-server 工作在 80 上,我更改了服务的目标端口

#sevice.yaml

apiVersion: v1
kind: Service
metadata:
  name: auth-db-gui-service
spec:
  selector:
    app: auth-db-gui
  ports:
    - name: auth-db-gui
      protocol: TCP
      port: 27017
      targetPort: 80
#deployment.yaml
 
apiVersion: apps/v1
kind: Deployment
metadata:
  name: auth-db-gui-deployment
spec:
  selector:
    matchLabels:
      app: auth-db-gui
  template:
    metadata:
      labels:
        app: auth-db-gui
    spec:
      containers:
        - name: auth-db-gui
          image: mendhak/http-https-echo

有关更多示例,请查看关于 services 的文档。

相关问题