未处理的异常。Npgsql.NpgsqlException (0x80004005):无法连接到10.152.183.151:5432。

huangapple go评论214阅读模式
英文:

Unhandled exception. Npgsql.NpgsqlException (0x80004005): Failed to connect to 10.152.183.151:5432

问题

无法连接我的.NET 6应用程序(来自Docker镜像)到Kubernetes(MicroK8s)中的PostgreSQL数据库。

  1. Unhandled exception. Npgsql.NpgsqlException (0x80004005): Failed to connect to 10.152.183.151:5432
  2. ---> System.Net.Sockets.SocketException (111): Connection refused
  3. at Npgsql.Internal.NpgsqlConnector.Connect(NpgsqlTimeout timeout)
  4. at Npgsql.Internal.NpgsqlConnector.Connect(NpgsqlTimeout timeout)
  5. at Npgsql.Internal.NpgsqlConnector.RawOpen(SslMode sslMode, NpgsqlTimeout timeout, Boolean async, CancellationToken cancellationToken, Boolean isFirstAttempt)
  6. at Npgsql.Internal.NpgsqlConnector.<Open>g__OpenCore|215_1(NpgsqlConnector conn, SslMode sslMode, NpgsqlTimeout timeout, Boolean async, CancellationToken cancellationToken, Boolean isFirstAttempt)

这是我的服务:

  1. NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
  2. web-app-service NodePort 10.152.183.40 <none> 80:31069/TCP 23m
  3. pgsql-service ClusterIP 10.152.183.151 <none> 5432/TCP 23m

这是我的YAML文件(密钥文件中的值是正确的):

  1. apiVersion: apps/v1
  2. kind: Deployment
  3. metadata:
  4. name: web-app-deployment
  5. namespace: exo-kubernetes
  6. spec:
  7. replicas: 1
  8. selector:
  9. matchLabels:
  10. app: web-app
  11. template:
  12. metadata:
  13. labels:
  14. app: web-app
  15. spec:
  16. containers:
  17. - image: my-image:latest
  18. name: web-app
  19. ports:
  20. - containerPort: 80
  21. resources:
  22. requests:
  23. memory: "64Mi"
  24. cpu: "250m"
  25. limits:
  26. memory: "128Mi"
  27. cpu: "500m"
  28. ---
  29. apiVersion: v1
  30. kind: Service
  31. metadata:
  32. name: web-app-service
  33. namespace: exo-kubernetes
  34. spec:
  35. selector:
  36. app: web-app-deployment
  37. type: NodePort
  38. ports:
  39. - port: 80
  40. targetPort: 80
  41. protocol: TCP
  42. ---
  43. apiVersion: apps/v1
  44. kind: Deployment
  45. metadata:
  46. name: pgsql-deployment
  47. namespace: exo-kubernetes
  48. spec:
  49. replicas: 1
  50. selector:
  51. matchLabels:
  52. app: pgsql
  53. template:
  54. metadata:
  55. labels:
  56. app: pgsql
  57. spec:
  58. containers:
  59. - image: postgres:15.3
  60. name: pgsql
  61. env:
  62. - name: POSTGRES_USER
  63. valueFrom:
  64. secretKeyRef:
  65. name: db-access
  66. key: USER
  67. - name: POSTGRES_PASSWORD
  68. valueFrom:
  69. secretKeyRef:
  70. name: db-access
  71. key: PASSWORD
  72. - name: POSTGRES_DB
  73. valueFrom:
  74. secretKeyRef:
  75. name: db-access
  76. key: DB_NAME
  77. ports:
  78. - containerPort: 5432
  79. resources:
  80. requests:
  81. memory: "512Mi"
  82. cpu: "600m"
  83. limits:
  84. memory: "2Gi"
  85. cpu: "1200m"
  86. volumeMounts:
  87. - mountPath: /var/lib/postgresql/data
  88. name: pgsql-vm
  89. volumes:
  90. - name: pgsql-vm
  91. ---
  92. apiVersion: v1
  93. kind: Service
  94. metadata:
  95. name: pgsql-service
  96. namespace: exo-kubernetes
  97. spec:
  98. selector:
  99. app: pgsql-deployment
  100. ports:
  101. - port: 5432
  102. targetPort: 5432
  103. ---
  104. apiVersion: networking.k8s.io/v1
  105. kind: Ingress
  106. metadata:
  107. name: web-app-ing
  108. namespace: exo-kubernetes
  109. spec:
  110. rules:
  111. - http:
  112. paths:
  113. - path: /
  114. pathType: Prefix
  115. backend:
  116. service:
  117. name: web-app-service
  118. port:
  119. number: 80

还有我的连接字符串:

  1. "DbConnection": "Host=pgsql-service;Port=5432;Database=Kubernetes;UserID=kubernetes;Password=kubernetes;"

如果有人有解决方案,我会非常高兴。

我尝试了几种解决方案,如修改端口或连接字符串,但都没有得出令人满意的结果。

英文:

I can't connect my .net 6 application (from docker image) to a postgresql database from kubernetes (microk8s).

  1. Unhandled exception. Npgsql.NpgsqlException (0x80004005): Failed to connect to 10.152.183.151:5432
  2. ---> System.Net.Sockets.SocketException (111): Connection refused
  3. at Npgsql.Internal.NpgsqlConnector.Connect(NpgsqlTimeout timeout)
  4. at Npgsql.Internal.NpgsqlConnector.Connect(NpgsqlTimeout timeout)
  5. at Npgsql.Internal.NpgsqlConnector.RawOpen(SslMode sslMode, NpgsqlTimeout timeout, Boolean async, CancellationToken cancellationToken, Boolean isFirstAttempt)
  6. at Npgsql.Internal.NpgsqlConnector.<Open>g__OpenCore|215_1(NpgsqlConnector conn, SslMode sslMode, NpgsqlTimeout timeout, Boolean async, CancellationToken cancellationToken, Boolean isFirstAttempt)

These are my services:

  1. NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
  2. web-app-service NodePort 10.152.183.40 <none> 80:31069/TCP 23m
  3. pgsql-service ClusterIP 10.152.183.151 <none> 5432/TCP 23m

Here is my yml file (the values in the secret file are correct) :

  1. apiVersion: apps/v1
  2. kind: Deployment
  3. metadata:
  4. name: web-app-deployment
  5. namespace: exo-kubernetes
  6. spec:
  7. replicas: 1
  8. selector:
  9. matchLabels:
  10. app: web-app
  11. template:
  12. metadata:
  13. labels:
  14. app: web-app
  15. spec:
  16. containers:
  17. - image: my-image:latest
  18. name: web-app
  19. ports:
  20. - containerPort: 80
  21. resources:
  22. requests:
  23. memory: "64Mi"
  24. cpu: "250m"
  25. limits:
  26. memory: "128Mi"
  27. cpu: "500m"
  28. ---
  29. apiVersion: v1
  30. kind: Service
  31. metadata:
  32. name: web-app-service
  33. namespace: exo-kubernetes
  34. spec:
  35. selector:
  36. app: web-app-deployment
  37. type: NodePort
  38. ports:
  39. - port: 80
  40. targetPort: 80
  41. protocol: TCP
  42. ---
  43. apiVersion: apps/v1
  44. kind: Deployment
  45. metadata:
  46. name: pgsql-deployment
  47. namespace: exo-kubernetes
  48. spec:
  49. replicas: 1
  50. selector:
  51. matchLabels:
  52. app: pgsql
  53. template:
  54. metadata:
  55. labels:
  56. app: pgsql
  57. spec:
  58. containers:
  59. - image: postgres:15.3
  60. name: pgsql
  61. env:
  62. - name: POSTGRES_USER
  63. valueFrom:
  64. secretKeyRef:
  65. name: db-access
  66. key: USER
  67. - name: POSTGRES_PASSWORD
  68. valueFrom:
  69. secretKeyRef:
  70. name: db-access
  71. key: PASSWORD
  72. - name: POSTGRES_DB
  73. valueFrom:
  74. secretKeyRef:
  75. name: db-access
  76. key: DB_NAME
  77. ports:
  78. - containerPort: 5432
  79. resources:
  80. requests:
  81. memory: "512Mi"
  82. cpu: "600m"
  83. limits:
  84. memory: "2Gi"
  85. cpu: "1200m"
  86. volumeMounts:
  87. - mountPath: /var/lib/postgresql/data
  88. name: pgsql-vm
  89. volumes:
  90. - name: pgsql-vm
  91. ---
  92. apiVersion: v1
  93. kind: Service
  94. metadata:
  95. name: pgsql-service
  96. namespace: exo-kubernetes
  97. spec:
  98. selector:
  99. app: pgsql-deployment
  100. ports:
  101. - port: 5432
  102. targetPort: 5432
  103. ---
  104. apiVersion: networking.k8s.io/v1
  105. kind: Ingress
  106. metadata:
  107. name: web-app-ing
  108. namespace: exo-kubernetes
  109. spec:
  110. rules:
  111. - http:
  112. paths:
  113. - path: /
  114. pathType: Prefix
  115. backend:
  116. service:
  117. name: web-app-service
  118. port:
  119. number: 80

and my ConnectionStrings :

  1. "DbConnection": "Host=pgsql-service;Port=5432;Database=Kubernetes;UserID=kubernetes;Password=kubernetes;"

If anyone has a solution, I'd be delighted.

I've tried several solutions like port modification or connectionStrings but without any conclusive result.

答案1

得分: 0

  1. apiVersion: apps/v1
  2. kind: Deployment
  3. metadata:
  4. name: pgsql-deployment
  5. namespace: exo-kubernetes
  6. labels: # 添加这个字段
  7. app: pgsql-deployment # 添加与服务中相同的标签
  8. spec:
  9. replicas: 1
  10. selector:
  11. matchLabels:
  12. app: pgsql
  13. template:
  14. metadata:
  15. labels:
  16. app: pgsql
  17. spec:
  18. containers:
  19. - image: postgres:15.3
  20. name: pgsql
  21. env:
  22. - name: POSTGRES_USER
  23. valueFrom:
  24. secretKeyRef:
  25. name: db-access
  26. key: USER
  27. - name: POSTGRES_PASSWORD
  28. valueFrom:
  29. secretKeyRef:
  30. name: db-access
  31. key: PASSWORD
  32. - name: POSTGRES_DB
  33. valueFrom:
  34. secretKeyRef:
  35. name: db-access
  36. key: DB_NAME
  37. ports:
  38. - containerPort: 5432
  39. resources:
  40. requests:
  41. memory: "512Mi"
  42. cpu: "600m"
  43. limits:
  44. memory: "2Gi"
  45. cpu: "1200m"
  46. volumeMounts:
  47. - mountPath: /var/lib/postgresql/data
  48. name: pgsql-vm
  49. volumes:
  50. - name: pgsql-vm
英文:

The selector label that you're using in postgres service (app: pgsql-deployment) should be present in your postgre's Deployment manifest. In your case, it's missing. It should be like this:

  1. apiVersion: apps/v1
  2. kind: Deployment
  3. metadata:
  4. name: pgsql-deployment
  5. namespace: exo-kubernetes
  6. labels: # add this field
  7. app: pgsql-deployment # add the same label as the one present in service
  8. spec:
  9. replicas: 1
  10. selector:
  11. matchLabels:
  12. app: pgsql
  13. template:
  14. metadata:
  15. labels:
  16. app: pgsql
  17. spec:
  18. containers:
  19. - image: postgres:15.3
  20. name: pgsql
  21. env:
  22. - name: POSTGRES_USER
  23. valueFrom:
  24. secretKeyRef:
  25. name: db-access
  26. key: USER
  27. - name: POSTGRES_PASSWORD
  28. valueFrom:
  29. secretKeyRef:
  30. name: db-access
  31. key: PASSWORD
  32. - name: POSTGRES_DB
  33. valueFrom:
  34. secretKeyRef:
  35. name: db-access
  36. key: DB_NAME
  37. ports:
  38. - containerPort: 5432
  39. resources:
  40. requests:
  41. memory: "512Mi"
  42. cpu: "600m"
  43. limits:
  44. memory: "2Gi"
  45. cpu: "1200m"
  46. volumeMounts:
  47. - mountPath: /var/lib/postgresql/data
  48. name: pgsql-vm
  49. volumes:
  50. - name: pgsql-vm

huangapple
  • 本文由 发表于 2023年5月28日 06:24:33
  • 转载请务必保留本文链接:https://go.coder-hub.com/76349285.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定