Kubernetes不识别服务修改

pcww981p  于 2023-04-29  发布在  Kubernetes
关注(0)|答案(1)|浏览(180)

如何强制Kubernetes“识别”服务的修改?
我最终将服务的类型/规格从

kind: Service
apiVersion: v1
metadata:
  name: service-a
  namespace: namespace-a
spec:
  type: ClusterIP
  selector:
    app: service-a-pods
  ports:
    - name: web
      port: 80

kind: Service
apiVersion: v1
metadata:
  name: service-a
  namespace: namespace-a
spec:
  type: ExternalName
  externalName: service-b.namespace-b.svc.cluster.local
  ports:
    - name: web
      port: 80

这工作正常,但是当我在Kubernetes中恢复更改时,service-a仍然继续转发到namespace-b中的service-b。即使硬删除和重新创建service-a也无济于事。
似乎CoreDNS没有更新或类似的东西。我找到的唯一解决方法是在namespace-b中重新创建service-b。这是预期的行为吗?

xvw2m8pv

xvw2m8pv1#

这是由于您的k8s集群中的coredns维护的DNS记录该高速缓存。如果您需要服务资源更改的即时效果,可以将以下ttl值减为零:
运行以下命令以编辑Corefile(coredns配置文件):

kubectl edit cm coredns -n kube-system

然后更新kubernetes插件下的TTL:

apiVersion: v1
data:
  Corefile: |
    .:53 {
        errors
        health {
           lameduck 5s
        }
        ready
        kubernetes cluster.local in-addr.arpa ip6.arpa {
           pods insecure
           fallthrough in-addr.arpa ip6.arpa
           ttl 0 # <-- set this ttl value to zero
        }
        prometheus :9153
        forward . /etc/resolv.conf {
           max_concurrent 1000
        }
        cache 30
        loop
        reload
        loadbalance
    }
kind: ConfigMap
metadata:
  name: coredns
  namespace: kube-system
  ...

注意:这可能会对群集中的DNS解析产生性能影响。您也可以将其减少到适当的值。

相关问题