首页 > 解决方案 > AWS/Kubernetes - 粘性选项不适用于 TCP 协议

问题描述

为什么默认负载均衡器端口 80 和 443 被视为 TCP 端口?我想通过 yaml 文件或通过 aws 控制台测试aws 文档中显示的粘性。

我正在使用 nginx 入口并移至默认负载均衡器以测试粘性,但我看到了错误Stickiness options not available for TCP protocols

在此处输入图像描述

我什至尝试指定协议https,但它不接受。它只允许 "SCTP", "TCP", "UDP".

    apiVersion: v1
    kind: Service
    metadata:
      name: httpd
      labels:
        app: httpd-service
      namespace: test-web-dev
   spec:
     #type: LoadBalancer
      selector:
        app: httpd
      ports:
        - name: port-80
          port: 80
          targetPort: 80
        - name: port-443
          port: 443
          targetPort: 443
        - name: port-1234
          port: 1234
          protocol: TCP
          targetPort: 1234

当我尝试进入时,我禁用了Loadbalancer上面的服务类型

nginx-ingress-lb-service.yml

apiVersion: v1
kind: ConfigMap
metadata:
  name: tcp-services
  namespace: ingress-nginx
data:
  1234: "test-web-dev/httpd:1234"
---
kind: Service
apiVersion: v1
metadata:
  name: ingress-nginx
  namespace: ingress-nginx
  labels:
    app.kubernetes.io/name: ingress-nginx
    app.kubernetes.io/part-of: ingress-nginx
spec:
  externalTrafficPolicy: Local
  type: LoadBalancer
  selector:
    app.kubernetes.io/name: ingress-nginx
    app.kubernetes.io/part-of: ingress-nginx
  ports:
    - name: http
      port: 80
      protocol: TCP
      targetPort: http
    - name: https
      port: 443
      protocol: TCP
      targetPort: https
    - name: port-1234
      port: 1234
      protocol: TCP
      targetPort: 1234

---

标签: amazon-web-serviceskubernetes

解决方案


粘性需要在 OSI 模型的第 7 层中运行的侦听器,在CLB情况下,它由侦听器提供。httphttps

由于您使用的是在layer 3TCP中运行的侦听器,因此不支持粘性。因此,如果您想使用粘性会话,则必须更改为或侦听器。 httphttps

UDP并且SCTP是 CLB 的无效侦听器。它仅支持TCPHTTP和。HTTPSSSL


推荐阅读