首页 > 解决方案 > Mac 上 docker 上的单一服务入口

问题描述

全新的 K8s 在这里,我正在尝试将 Ingress 部署/连接到docker for local(适用于 mac 的 docker)上的示例单一服务,并能够点击它来运行该服务

1- 示例服务如下所示(my_service.js):

const express = require('express')
let app = express()

app.get('/', (req, res) => {
    res.send('Hello service')
})

const PORT = process.env.PORT || 9000
app.listen(
    PORT,
    () => console.log('Listening')
    )

我构建图像(使用 docker 文件):

docker build . -t sample-service-image

2- 现在从 K8s 的角度来看:这是部署文件

apiVersion: apps/v1
kind: Deployment
metadata:
  name: sample-service
  labels:
    app: sample-service
spec:
  replicas: 1
  selector:
    matchLabels:
      app: sample-service
  template:
    metadata:
      labels:
        app: sample-service
    spec:
      containers:
      - name: sample-service
        image: sample-service-image
        imagePullPolicy: Never
        ports:
        - containerPort: 9000
kubectl apply -f deployment.yaml

并将其作为服务公开:

kubectl expose deploy sample-service --type=NodePort

3- 现在来自 Ingress (ingress-sample.yaml) :

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: ingress-sample
spec:
  backend:
    serviceName: sample-service
    servicePort: 80
kubectl create -f ingress-sample.yaml

[更新] 我从这里部署了一个入口控制器:

kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/master/deploy/provider/baremetal/service-nodeport.yaml

这就是我得到的

$kubectl get ingress
NAME             HOSTS   ADDRESS     PORTS   AGE
ingress-sample   *       localhost   80      8m
kubectl get services --all-namespaces | grep nginx
ingress-nginx   ingress-nginx    NodePort    10.106.47.48     <none>        80:31448/TCP,443:31512/TCP   2h

试图点击它,http://localhost:31448/但我503从 NGINX 得到......所以我猜它没有正确连接到sample-service.

我应该如何点击 Ingress 才能调用示例服务?

标签: kuberneteskubernetes-ingress

解决方案


您需要Host在点击服务时指定标题。例如

curl -H "HOST: abc" http://localhost:31448/

由于您的入口定义未指定任何主机配置,因此您可以传递任何值。

欲了解更多信息 -请参阅


推荐阅读