在本地Kubernetes上配置Nginx-Ingress-Controller

这篇文章是关于“在本地和Kubernetes上部署微服务意识的Web应用程序的轨迹”的一部分。

首先

我们想要在Kubernetes上按照以下配置来构建Web应用程序。

app   ---- /authentication  :  (1)認証用nodejsアプリ (ポート3000)
       |-- /serviceA
       |     |-- /          :  (2)vuejsで作成したサービスAのフロントエンド (ポート8080)
       |     |-- /api       :  (3)expressで作成したサービスAのバックエンド (ポート3001)
       |
       |-- /serviceB
             |-- /          :  (4)vuejsで作成したサービスBのフロントエンド (ポート8081)
             |-- /api       :  (5)expressで作成したサービスBのバックエンド (ポート3101)

1到5个服务都在不同的端口上运行,并且每个服务都在独立的端口上等待连接。如果不做任何更改就部署这个配置,假设域名是www.services.com,

www.services.com:8080
www.services.com:8081

用中文进行逐句翻译,如下:

以这种方式访问将会导致许多负面影响。

www.services.com/serviceA
www.services.com/serviceB

我們將設定使其可以透過網路進行訪問。

使用Ingress

尽管我并没有深入理解,但从下面看来,使用Ingress功能似乎是实现这一目标的好方法。

我会尽快进行设置。
假设服务A和服务B已经部署好了。

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: test-ingress
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /
spec:
  rules:
  - http:
      paths:
      - path: /serviceA
        backend:
          serviceName: service-a
          servicePort: 8080
      - path: /serviceB
        backend:
          serviceName: service-b
          servicePort: 8081
kubectl apply -f ingress-sample.yaml

不动了。

看起来,这个Ingress只是一个配置,要实际运行需要另外准备一个实体。

因此,我們將使用Nginx-Ingress-Controller。

使用Nginx-Ingress-Controller

查询后发现,官方已经写下了步骤。我会按照那个步骤试试看。

在本地环境中的步骤如下,只需两个命令即可完成。

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

这样怎么样!

502.png

似乎还缺少了一些东西…

当我进行了一番调查后,我发现了这篇文章。

在Kubernetes中安装Nginx Ingress Controller

根据这篇文章的报道,

将node的IP指定为externalIPs

刚才我直接把在网上公开的yaml文件传给了kubectl,但现在我决定先将其下载到本地,然后再编辑相关部分。

$ wget https://raw.githubusercontent.com/kubernetes/ingress-nginx/master/deploy/mandatory.yaml
$ wget https://raw.githubusercontent.com/kubernetes/ingress-nginx/master/deploy/provider/baremetal/service-nodeport.yaml
$ nano service-nodeport.yaml
apiVersion: v1
kind: Service
metadata:
  name: ingress-nginx
  namespace: ingress-nginx
  labels:
    app.kubernetes.io/name: ingress-nginx
    app.kubernetes.io/part-of: ingress-nginx
spec:
  type: NodePort
  ports:
    - name: http
      port: 80
      targetPort: 80
      protocol: TCP
    - name: https
      port: 443
      targetPort: 443
      protocol: TCP
  selector:
    app.kubernetes.io/name: ingress-nginx
    app.kubernetes.io/part-of: ingress-nginx
  externalIPs:      <-- ここを追加
    - 192.168.0.xxx <-- ここを追加

根据这个设定,

$ kubectl apply -f mandatory.yaml
$ kubectl apply -f  service-nodeport.yaml
200.png

我可以动了!

由於完全不明白的情況下一直在進行,所以遇到了相當大的困難,但一旦設置能夠運作起來,只需更改開頭的Ingress設定文件就能將服務分配給特定路徑,非常方便。

以上了。
辛苦了!

广告
将在 10 秒后关闭
bannerAds