我正在尝试将我的应用程序转换为 kubenetes 和 NGINX 入口控制器



我有一个带有nodejs和mysql的微服务,我尝试在kubernetes中使用这个具有可扩展性的应用程序几天。我将每个服务转换为POD的映像,实际上我有一个网关,它将TCP流量应用于每个服务。我的问题是,当我为每个pod运行端口转发时:kubectl端口转发My -gateway—address 192.168.18。x 3000kubectl端口转发my-adm-contact——地址192.168.18。x 8181这正常工作,但我怎么能做一个端口转发我决定使用NGINX入口控制器,我将它与helm一起安装,但它只在页面上给出404 Not Found。我将把我的结构放在

下面跟随我的网关:

import { Module } from '@nestjs/common';
import { AppController } from './app.controller';
import { ClientsModule, Transport } from '@nestjs/microservices';
import { AppService } from './app.service';
@Module({
imports: [
ClientsModule.register([
{
name: 'SERVICE_A',
transport: Transport.TCP,
options: {
host: "192.168.18.x",
port: 8888,
},
},
{
name: 'SERVICE_B',
transport: Transport.TCP,
options: {
host: "192.168.18.x",
port: 8889,
},
},
{
name: 'USER',
transport: Transport.TCP,
options: {
host: "192.168.18.x",
port: 8887,
},
},
{
name: 'USER_LOGIN',
transport: Transport.TCP,
options: {
host: "192.168.18.x",
port: 8886,
},
},
{
name: 'USER_CREATE',
transport: Transport.TCP,
options: {
host: "192.168.18.x",
port: 8885,
},
},
{
name: 'USER_UPDATE',
transport: Transport.TCP,
options: {
host: "192.168.18.x",
port: 8884,
},
},
{
name: 'CATEGORY',
transport: Transport.TCP,
options: {
host: "192.168.18.x",
port: 8883,
},
},
{
name: 'CATEGORY_BUSCA',
transport: Transport.TCP,
options: {
host: "192.168.18.x",
port: 8882,
},
},
{
name: 'CATEGORY_PRODUCT',
transport: Transport.TCP,
options: {
host: "192.168.18.x",
port: 8881,
},
},
{
name: 'USER_SENHA',
transport: Transport.TCP,
options: {
host: "192.168.18.x",
port: 8880,
},
},
{
name: 'ADM_CONTACT',
transport: Transport.TCP,
options: {
host: "192.168.18.x",
port: 8181,
},
},
{
name: 'LOCATION',
transport: Transport.TCP,
options: {
host: "192.168.18.x",
port: 8878,
},
},
{
name: 'PRODUCT_STAR',
transport: Transport.TCP,
options: {
host: "192.168.18.x",
port: 8877,
},
},
{
name: 'PRODUCT_SINGLE',
transport: Transport.TCP,
options: {
host: "192.168.18.x",
port: 8876,
},
},
{
name: 'PRODUCT_GET_STAR',
transport: Transport.TCP,
options: {
host: "192.168.18.x",
port: 8875,
},
},
{
name: 'PURCHASE_CREATE',
transport: Transport.TCP,
options: {
host: "192.168.18.x",
port: 8874,
},
},
{
name: 'PURCHASE_GET_CART',
transport: Transport.TCP,
options: {
host: "192.168.18.x",
port: 8873,
},
},
{
name: 'PURCHASE_GET',
transport: Transport.TCP,
options: {
host: "192.168.18.x",
port: 8870,
},
}
]),
],
controllers: [AppController],
providers: [AppService],
})
export class AppModule {}

联系服务:

import { NestFactory } from '@nestjs/core';
import { Transport } from '@nestjs/microservices';
import { AppModule } from './app.module';
import { Logger } from '@nestjs/common';
const logger = new Logger();
async function bootstrap() {
const app = await NestFactory.createMicroservice(AppModule, {
transport: Transport.TCP,
options: {
host: "0.0.0.0",
port: 8181,
},
});
app.listen(() => logger.log('Microservice ADM CONTACT is listening'));
}
bootstrap();

kubernetes service contact:

apiVersion: v1
kind: Service
metadata:
name: my-adm-contact-service
namespace: default
spec:
ports:
- port: 8181
protocol: TCP
targetPort: 8181

kubernetes POD contact:

apiVersion: v1
kind: Pod
metadata:
name: my-adm-contact
labels:
app: my-adm-contact
name: my-adm-contact
spec:
containers:
- image: my-adm-contact
imagePullPolicy: Never
name: my-adm-contact
ports:
- containerPort: 8181
protocol: TCP
restartPolicy: Always

kubernetes endpoint contact:

apiVersion: v1
kind: Endpoints
metadata:
name: my-adm-contact-service
subsets:
- addresses:
- ip: 192.168.18.x
ports:
- port: 8181

kubernetes服务网关:

apiVersion: v1
kind: Service
metadata:
name:  my-gateway-service
namespace: default
spec:
ports:
- port: 3000
protocol: TCP
targetPort: 3000
kubernetes POD gateway:
apiVersion: v1
kind: Pod
metadata:
name: my-gateway
labels:
app: my-gateway
name: my-gateway
spec:
containers:
- image: api-gateway
imagePullPolicy: Never
name: my-gateway
ports:
- containerPort: 3000
protocol: TCP
restartPolicy: Always

kubernetes端点网关:

apiVersion: v1
kind: Endpoints
metadata:
# the name here should match the name of the Service
name: my-gateway-service
subsets:
- addresses:
- ip: 192.168.18.x
ports:
- port: 3000

kubernetes入口:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: web-ingress
namespace: default
spec:
ingressClassName: nginx
#  defaultBackend:
#    service:
#      name: my-gateway-service
#      port:
#        number: 3000
rules:
- host: host.docker.internal
- http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: my-gateway-service
port:
number: 3000
- path: /adm-contact
pathType: Prefix
backend:
service:
name: my-adm-contact-service
port:
number: 8181


我ingress-nginx-tcp

:

apiVersion: v1
data:
"3000": default/my-gateway-service:3000
"8181": default/my-adm-contact-service:8181
kind: ConfigMap
metadata:
annotations:
meta.helm.sh/release-name: ingress-nginx
meta.helm.sh/release-namespace: ingress-nginx
creationTimestamp: "2022-06-28T00:00:28Z"
labels:
app.kubernetes.io/component: controller
app.kubernetes.io/instance: ingress-nginx
app.kubernetes.io/managed-by: Helm
app.kubernetes.io/name: ingress-nginx
app.kubernetes.io/part-of: ingress-nginx
app.kubernetes.io/version: 1.2.1
helm.sh/chart: ingress-nginx-4.1.4
name: ingress-nginx-tcp
namespace: ingress-nginx
resourceVersion: "264565"
uid: 2284f6eb-53f9-4d8c-9f62-6ad303120f63

有谁知道怎么帮我吗?

您在pod规格中将ImagePullPolicy设置为Never的具体原因是什么?也许可以尝试将其保留为默认值并删除它。

另外,您是否确保您的服务在集群中正常运行?您可以尝试暂时绕过ingress,并尝试通过将服务类型设置为NodePort并使用<Node-IP>:<nodePort>来直接从集群外部访问服务。只是为了验证问题不在服务后端本身?在我看来,这就是问题所在。

最新更新