【问题标题】:How can I use istio-ingressgateway to access postgreSQL?如何使用 istio-ingressgateway 访问 postgreSQL?
【发布时间】:2020-09-29 22:09:17
【问题描述】:

我设置了一个在 K8s 中注入 istio 的 postgreSQL,我想使用 psql(或 postgreSQL 客户端)从其他网络访问它,所以我试图设置 istio-ingressgateway 来访问它,并设置相关的网关和virtualservice 来路由流量,但会出现一些错误,如下所示。请帮忙看看问题。

"psql: 服务器意外关闭连接 这可能意味着服务器异常终止 在处理请求之前或期间。 "

yaml 文件如下

    cat <<EOF | kubectl apply -f -
    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: postgres-config
      labels:
        app: postgres
    data:
      POSTGRES_DB: usermgt
      POSTGRES_USER: admin
      POSTGRES_PASSWORD: admin2020
    EOF

    cat <<EOF | kubectl apply -f -
    kind: PersistentVolume
    apiVersion: v1
    metadata:
      name: postgres-pv-volume
      labels:
        type: local
        app: postgres
    spec:
      storageClassName: manual
      capacity:
        storage: 1Gi
      accessModes:
        - ReadWriteMany
      hostPath:
        path: "/mnt/data"
    ---
    kind: PersistentVolumeClaim
    apiVersion: v1
    metadata:
      name: postgres-pv-claim
      labels:
        app: postgres
    spec:
      storageClassName: manual
      accessModes:
        - ReadWriteMany
      resources:
        requests:
          storage: 1Gi
    EOF

cat <<EOF | istioctl kube-inject -f - | kubectl apply -f -
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: postgres
spec:
  replicas: 1
  template:
    metadata:
      labels:
        app: postgres
    spec:
      containers:
        - name: postgres
          image: postgres:10.4
          imagePullPolicy: "IfNotPresent"
          ports:
            - containerPort: 5432
          envFrom:
            - configMapRef:
                name: postgres-config
          volumeMounts:
            - mountPath: /var/lib/postgresql/data
              name: postgredb
      volumes:
        - name: postgredb
          persistentVolumeClaim:
            claimName: postgres-pv-claim
---
apiVersion: v1
kind: Service
metadata:
  name: postgres
  labels:
    app: postgres
spec:
  ports:
   - port: 5432
  selector:
   app: postgres
EOF

cat <<EOF | kubectl apply -f -
apiVersion: networking.istio.io/v1alpha3
kind: Gateway
metadata:
  name: postgres-gateway
spec:
  selector:
    istio: ingressgateway
  servers:
  - port:
      number: 5432
      name: pgsql
      protocol: TCP
    hosts:
    - "*"
EOF


cat <<EOF | kubectl apply -f -
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: psql-vs
spec:
  hosts:
  - "*"
  gateways:
  - postgres-gateway
  tcp:
  - match:
    - port: 5432
    route:
    - destination:
        host: postgres.default
        port:
          number: 5432

EOF

【问题讨论】:

  • 你的 istio 版本是多少?您是否尝试将 sidecar.istio.io/inject: "false" 注释添加到您的部署中并尝试它是否在没有 istio 的情况下工作?基于此github issue 考虑,postgres 与 istio 结合可能存在一些问题。

标签: postgresql kubernetes istio


【解决方案1】:

这是我的配置,它可以工作:

apiVersion: networking.istio.io/v1alpha3
kind: Gateway
metadata:
  name: postgres-gateway
  namespace: default
spec:
  selector:
    istio: ingressgateway 
  servers:
  - hosts:
    - '*'
    port:
      number: 5432
      name: tcp-postgres
      protocol: TCP

apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: postgres-vs
  namespace: default
spec:
  hosts:
  - "*"
  gateways:
  - postgres-gateway
  hosts:
  - '*'
  tcp:
  - match:
    - port: 5432
    route:
    - destination:
        host: postgres-db-postgresql-ha-pgpool.default.svc.cluster.local
        port:
          number: 5432

【讨论】:

  • 你缺少服务资源,所以我看不出没有它是如何工作的。
猜你喜欢
  • 2019-11-13
  • 1970-01-01
  • 2020-08-09
  • 2021-08-24
  • 1970-01-01
  • 1970-01-01
  • 2019-03-09
  • 1970-01-01
  • 2018-06-11
相关资源
最近更新 更多