使用服务内部流量策略(kubernetes)

kubernetes 官网

https://kubernetes.io/zh-cn/docs/concepts/services-networking/service-traffic-policy/

k8s Service Internal Traffic Policy(服务内部流量策略)

最近整理k8s相关知识的时候在官网看见了这个服务内部流量策略,所以用自己的k8s 环境浅试一下到底怎么个事。

k8s 官网说我们可以通过将 Service 的 .spec.internalTrafficPolicy 项设置为 Local, 来为它指定一个内部专用的流量策略。 此设置就相当于告诉 kube-proxy 对于集群内部流量只能使用节点本地的服务端口。

创建测试环境

kubectl create deployment web --image=nginx -n test --port=8080 --dry-run=client -o yaml > nginx.yaml

让pod 运行在node01 上

给node 打上lable

kubectl label nodes k8s-node01 name=node01

kubectl label nodes k8s-node02 name=node02

kubectl get node --show-labels

编辑deployment 加nodeSelector 让其调度到node01 上

root@k8s-master:~# cat nginx.yaml 
apiVersion: apps/v1
kind: Deployment
metadata:
  creationTimestamp: null
  labels:
    app: web
  name: web
  namespace: test
spec:
  replicas: 1
  selector:
    matchLabels:
      app: web
  strategy: {}
  template:
    metadata:
      creationTimestamp: null
      labels:
        app: web
    spec:
      nodeSelector:
        name: node01
      containers:
      - image: nginx
        name: nginx
        ports:
        - containerPort: 80
        resources: {}
status: {}

改一下nginx index.html 内容

kubectl exec -it -n test web-6bbb9dc4c6-5fg5v -- bash

echo 'hello' > /usr/share/nginx/html/index.html

root@k8s-master:~# curl http://10.244.85.195

hello

root@k8s-master:~#

依此在两个node 上curl 均有结果

将deployment expose 成svc

kubectl expose deployment -n test web --port=8080 --target-port=80 --protocol=TCP --dry-run=client -o yaml > nginx-svc.yaml

使用 `internalTrafficPolicy: Local`

root@k8s-master:~# cat nginx-svc.yaml 
apiVersion: v1
kind: Service
metadata:
  creationTimestamp: null
  labels:
    app: web
  name: web
  namespace: test
spec:
  ports:
  - port: 80
    protocol: TCP
    targetPort: 8080
  selector:
    app: web
  internalTrafficPolicy: Local
status:
  loadBalancer: {}


root@k8s-master:~#kubectl create -f nginx-svc.yaml

root@k8s-master:~#kubectl get svc -n test web

NAME   TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)    AGE

web    ClusterIP   10.99.246.160   <none>        8080/TCP   10s

在node01 可以直接curl 出hello,但是在master 和node02 无法curl 通

root@k8s-node01:/var/lib/kubelet/pki# curl http://10.99.246.160:8080
hello

**工作原理**

- kube-proxy 基于 spec.internalTrafficPolicy 的设置来过滤路由的目标服务端点。 当它的值设为 Local 时,只会选择节点本地的服务端点。 当它的值设为 Cluster 或缺省时,Kubernetes 会选择所有的服务端点。

`kubectl edit -n test service web ` 将 `internalTrafficPolicy: Local` 改成Cluster 之后所有节点都可以可以curl 通nginx.




 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值