Kubernetes - 在 configmap 中指定 externalips

bla*_*bla 2 config kubernetes

我有一个 Kubernetes 集群(外部 ips:1.2.3.4、2.3.4.5、3.4.5.6)我想在这个集群上的 5000 端口上托管一个 docker 注册表。现在为了启用这个,我用 externalips 做了一个测试,它可以工作。这使得 nginx 在端口 85 上可用。

apiVersion: v1
kind: Service
metadata:
  name: nginx-extip
spec:
  type: ClusterIP
  ports:
  - name: http
    protocol: TCP
    port: 85
    targetPort: 80
  selector:
    app: nginx-extip
  externalIPs:
  - 1.2.3.4
  - 2.3.4.5
  - 3.4.5.6
---
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: nginx-extip
spec:
  replicas: 1
  template:
    metadata:
      labels:
        app: nginx-extip
    spec:
      containers:
      - name: nginx-extip-server
        image: nginx
        ports:
        - containerPort: 80
Run Code Online (Sandbox Code Playgroud)

现在要重用 externalip 配置,我想把它放到一个 configmap 中。所以所有的 yaml 都可以只引用 configmap 并且我们不必在它们更改时手动更新 externalips。如何将一组 ips 放入 configmap?

我当前(不工作)的配置映射:

apiVersion: v1
kind: ConfigMap
metadata:
  name: externalips
  namespace: default
data:
  externalips:
  - 1.2.3.4
  - 2.3.4.5
  - 3.4.5.6
Run Code Online (Sandbox Code Playgroud)

我得到的错误:

error: error validating "static-ips-configmap.yml": error validating data: 
ValidationError(ConfigMap.data.externalips): invalid type for
io.k8s.api.core.v1.ConfigMap.data: got "array", expected "string";
if you choose to ignore these errors, turn validation off with --validate=false
Run Code Online (Sandbox Code Playgroud)

如何将这些 IP 放入配置映射中?

ffl*_*ing 5

这里有两个问题:

  1. configmap 本身的创建存在语法错误。Config map 希望你列出一堆文件和它们的内容,所以正确的语法应该是这样的:

    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: externalips
      namespace: default
    data:
      external-ips.list: |
        externalips:
        - 1.2.3.4
        - 2.3.4.5
        - 3.4.5.6
    
    Run Code Online (Sandbox Code Playgroud)
  2. 我认为不可能引用您创建的 configmap 来模板化服务规范。因此,即使您设法正确创建了 configmap,您仍然无法将其作为不同服务定义的一部分重用。

您需要一个带外模板系统,可用于将这些外部 IP 添加到服务中。或者,使用入口控制,您必须使用外部 IP 配置一次,然后使用它来多路复用集群内的所有 HTTP 服务。通过这种方式,您无论如何只能管理一项服务的 IP。