kubernets 服务跨命名空间访问

kubernetes 服务跨命名空间访问

大家都知道namespace是作为资源隔离,用于分组,可以把我不同组件,不同服务放在不同namespace下,便于管理。那么我现在有需求,希望服务之间可以互相访问,也就是跨namespace的服务访问,应该怎么处理呢?

svc 的 4种类型
ClusterIP 默认,分配一个VIP,只能内部访问
NodePort ClusterIP基础上,在每个节点绑定一个对外访问端口
LoadBalancer 在NodePort基础上,外部负载均衡器转发到NodePort
ExternalName 集群外部的服务引入到集群内部来,集群内部使用

实现上述功能,就需要使用大svc的ExternalName 这种类型。

具体操作方法如下

  1. 在default 下创建服务 ,以echoservice 为例
$ kubectl apply -f https://bit.ly/echo-service
service/echo created
deployment.apps/echo created

可以通过kubectl 查看服务

$ kubectl get svc echo
NAME   TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)           AGE
echo   ClusterIP   10.102.214.18   <none>        8080/TCP,80/TCP   69m
  1. 新建一个namespace test
$ kubectl create namespace test
  1. 在test下创建svc ,关联到default下svc
apiVersion: v1
kind: Service
metadata:
  name: echo-default
  namespace: test
spec:
  type: ExternalName
  externalName: echo.default.svc.cluster.local
$ kubectl get svc -n test
NAME           TYPE           CLUSTER-IP   EXTERNAL-IP                      PORT(S)   AGE
echo-default   ExternalName   <none>       echo.default.svc.cluster.local   <none>    29m
  1. 在 test 下创建ingres ,指向test下svc,这样就可以访问default下的echo服务了
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: demo
  namespace: test
spec:
  rules:
  - http:
      paths:
      - path: /bar
        backend:
          serviceName: echo-default
          servicePort: 80
$ kubectl get ingress -n test
NAME   HOSTS   ADDRESS           PORTS   AGE
demo   *       192.168.159.129   80      31m
$   curl -i 192.168.159.129:32359/bar
HTTP/1.1 200 OK
Content-Type: text/plain; charset=UTF-8
Transfer-Encoding: chunked
Connection: keep-alive
Date: Sat, 09 May 2020 09:08:48 GMT
Server: echoserver
X-Kong-Upstream-Latency: 1
X-Kong-Proxy-Latency: 1
Via: kong/2.0.3



Hostname: echo-c4cb89895-pnf85

Pod Information:
        node name:      192.168.159.129
        pod name:       echo-c4cb89895-pnf85
        pod namespace:  default
        pod IP: 10.32.0.7

Server values:
        server_version=nginx: 1.13.3 - lua: 10008

Request Information:
        client_address=::ffff:10.32.0.6
        method=GET
        real path=/
        query=
        request_version=1.1
        request_scheme=http

这样就可以通过svc 的ExternalName实现跨namespace的访问了

你可能感兴趣的:(kubernetes)