Kubernetes - 在configmap中指定externalips

时间:2018-04-25 09:51:10

标签: kubernetes config

我有一个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

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

我当前(不工作)的configmap:

apiVersion: v1
kind: ConfigMap
metadata:
  name: externalips
  namespace: default
data:
  externalips:
  - 1.2.3.4
  - 2.3.4.5
  - 3.4.5.6

我得到的错误:

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

如何将这些IP放入配置图?

2 个答案:

答案 0 :(得分:2)

这里有两个问题:

  1. 创建configmap本身时出现语法错误。配置映射要求您列出一堆文件及其内容,因此正确的语法如下所示:

    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
    
  2. 我不认为可以引用您为模板化服务规范创建的配置图。因此,即使您设法正确创建了配置图,您仍然无法将其作为不同服务定义的一部分重用。

  3. 您需要一个带外模板系统,您可以使用该系统将这些外部IP添加到服务中。或者,使用入口控件,您必须使用外部IP 配置一次,然后使用它来复用集群内的所有HTTP服务。这样,您无论如何都只管理一项服务的IP。

答案 1 :(得分:2)

ffledgling的回答是正确的,但我认为“external-ips.list”会让人感到困惑。

这应该是configmap yaml文件:

apiVersion: v1
kind: ConfigMap
metadata:
  name: externalips
  namespace: default
data:
  externalips: |
    ips:
    - 1.2.3.4
    - 2.3.4.5
    - 3.4.5.6

所以,“externalips”,“ips”,“external-ips.list”可以是任何东西,因为它们只是键。