云服务器内容精选

  • 使用Ingress规则 使用podSelector设置访问范围 apiVersion: networking.k8s.io/v1 kind: NetworkPolicy metadata: name: test-network-policy namespace: default spec: podSelector: # 规则对具有role=db标签的Pod生效 matchLabels: role: db ingress: # 表示入规则 - from: - podSelector: # 只允许具有role=frontend标签的Pod访问 matchLabels: role: frontend ports: # 只能使用TCP协议访问6379端口 - protocol: TCP port: 6379 示意图如下所示。 图1 podSelector 使用namespaceSelector设置访问范围 apiVersion: networking.k8s.io/v1 kind: NetworkPolicy metadata: name: test-network-policy spec: podSelector: # 规则对具有role=db标签的Pod生效 matchLabels: role: db ingress: # 表示入规则 - from: - namespaceSelector: # 只允许具有project=myproject标签的命名空间中的Pod访问 matchLabels: project: myproject ports: # 只能使用TCP协议访问6379端口 - protocol: TCP port: 6379 示意图如下所示。 图2 namespaceSelector
  • 路由到多个服务 Ingress可以同时路由到多个服务,配置如下所示。 当访问“http://foo.bar.com/foo”时,访问的是“s1:80”后端。 当访问“http://foo.bar.com/bar”时,访问的是“s2:80”后端。 Ingress转发策略中的path路径要求后端应用内存在相同的路径,否则转发无法生效。 例如,Nginx应用默认的Web访问路径为“/usr/share/nginx/html”,在为Ingress转发策略添加“/test”路径时,需要应用的Web访问路径下也包含相同路径,即“/usr/share/nginx/html/test”,否则将返回404。 ... spec: rules: - host: foo.bar.com # host地址 http: paths: - path: "/foo" backend: service: name: s1 port: number: 80 - path: "/bar" backend: service: name: s2 port: number: 80 ...
  • Ingress工作机制 要想使用Ingress功能,必须在Kubernetes集群上安装Ingress Controller。Ingress Controller有很多种实现,最常见的就是Kubernetes官方维护的NGINX Ingress Controller;不同厂商通常有自己的实现,例如CCE使用弹性负载均衡服务ELB实现Ingress的七层负载均衡。 外部请求首先到达Ingress Controller,Ingress Controller根据Ingress的路由规则,查找到对应的Service,进而通过Endpoint查询到Pod的IP地址,然后将请求转发给Pod。 图2 Ingress工作机制
  • 创建Ingress 下面例子中,使用http协议,关联的后端Service为“nginx:8080”,使用ELB作为Ingress控制器(metadata.annotations字段都是指定使用哪个ELB实例),当访问“http://192.168.10.155:8080/”时,流量转发“nginx:8080”对应的Service,从而将流量转发到对应Pod。 示例如下(适用于v1.23及以上版本的集群): apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: test-ingress annotations: kubernetes.io/elb.class: union kubernetes.io/elb.port: '8080' kubernetes.io/elb.id: aa7cf5ec-7218-4c43-98d4-c36c0744667a spec: rules: - host: '' http: paths: - path: / backend: service: name: nginx port: number: 8080 property: ingress.beta.kubernetes.io/url-match-mode: STARTS_WITH pathType: ImplementationSpecific ingressClassName: cce