envoy入门(2)(k8s环境)

今天,让我们一起来在k8s环境下,体验一下envoy.

环境说明:

  • ubuntu 20.04.2 三台
  • k8s: v1.22.2,1个master节点 + 2 个worker节点
  • Harbor-2.4 ,域名:hb.cn
  • docker:

实验的目标:

使用envoy POD做反向代理,访问另一个POD tomcat(业务容器),并通过NodePort的方式,把envoy的服务暴露去出,实现可以在k8s中任意node节点上访问,如下。

操作步骤:

第1步:准备tomcat 的文件.

 上图中设置了tomcat服务的名称为:tomcat-9-svc,端口为80.

注意:hb.cn/repo/tomcat:9,是我harbor私服上的镜像,大家也可以使用docker hub上的。

第2步:部署到k8s中。

第3步:准备一份envoy.yaml。

设置了监听10000端口,访问时跳转到集群的tomcat-9-svc服务的80端口。

admin:
  address:
    socket_address: { address: 127.0.0.1, port_value: 9901 }

static_resources:
  listeners:
    - name: listener_0
      address:
        socket_address: { address: 0.0.0.0, port_value: 10000 }
      filter_chains:
        - filters:
            - name: envoy.filters.network.http_connection_manager
              typed_config:
                "@type": type.googleapis.com/envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager
                stat_prefix: ingress_http
                codec_type: AUTO
                route_config:
                  name: local_route
                  virtual_hosts:
                    - name: local_service
                      domains: ["*"]
                      routes:
                        - match: { prefix: "/" }
                          route: { cluster: some_service }
                http_filters:
                  - name: envoy.filters.http.router
                    typed_config:
                      "@type": type.googleapis.com/envoy.extensions.filters.http.router.v3.Router

  clusters:
    - name: some_service
      connect_timeout: 0.25s
      type: LOGICAL_DNS
      lb_policy: ROUND_ROBIN
      load_assignment:
        cluster_name: some_service
        endpoints:
          - lb_endpoints:
              - endpoint:
                  address:
                    socket_address:
                      address: tomcat-9-svc
                      port_value: 80

第4步:创建configmap.

查看一个ConfigMap:

可以看到,我们创建了一个ConfigMap,它的key为envoy.yml。下面的步骤中,会把这个文件放入到容器中,作为配置文件,所以,这个文件名称不能错。

第5步:准备一份k8s部署的yaml文件。

apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    run: envoy
  name: envoy
apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    run: envoy
  name: envoy
spec:
  replicas: 1
  selector:
    matchLabels:
      run: envoy
  template:
    metadata:
      labels:
        run: envoy
    spec:
      containers:
      - image: hb.cn/repo/envoy-dev:1.23.0-dev
        name: envoy
        volumeMounts:
        - name: envoy-config-101
          mountPath: "/etc/envoy"
          readOnly: true
      volumes:
      - name: envoy-config-101
        configMap:
          name: envoy-config-101

---
apiVersion: v1
kind: Service
metadata:
  name: envoy-svc
spec:
  selector:
    run: envoy
  type: NodePort
  ports:
    - port: 80
      nodePort: 31234
      targetPort: 10000

以上配置几点说明如下:

  • hb.cn/repo/envoy-dev:1.23.0-dev,是我harbor私服上的envoy镜像,也可以使用docker hub上的。
  • 使用envoy-config-101 configmap,并挂到容器里的/etc/envoy目录中,名称为:envoy.yaml。
  • 把容器里的10000端口,以NodePort方式,暴露为31234端口

第6步:部署envoy pod.

第7步:访问k8s的其中一个woker节点,验证是否成功。

 可以看到,上面使用是的envoy的31234 服务端口,但显示的是tomcat的输出,证明转发(反向代理)是成功的。tomcat上没有任何的war包,所以看到404。

扩展:

在第5步中,我是如何知道envoy.xml文件,应该放在/etc/envoy/目录下呢?

我们可以使用docker inpect命令来寻找答案。如下图。镜像的Cmd是容器的入口,有个-c参数,指定了envoy进程启动时,读取/etc/envoy/envoy.yaml文件。

 

参考:

envoy入门(1)(docker环境)_湾区的候鸟的博客-CSDN博客

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值