首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >GKE入口修改现有主机/路径

GKE入口修改现有主机/路径
EN

Stack Overflow用户
提问于 2020-11-27 20:47:46
回答 2查看 431关注 0票数 1

是否可以通过命令行/脚本修改(添加/删除)现有主机?我希望在第一次部署新应用程序时动态添加它们。我目前使用的是这个脚本:

代码语言:javascript
复制
#!/bin/bash

APP_NAME=$1

if [[ -z $(kubectl get ingress ingress-gw -o yaml | grep "serviceName: $APP_NAME-service") ]]
then echo "$(kubectl get ingress ingress-gw -o yaml | sed '/^status:$/Q')
  - host: $APP_NAME.example.com
    http:
      paths:
      - path: "/*"
        backend:
          serviceName: $APP_NAME-service
          servicePort: 80
$(kubectl get ingress ingress -o yaml | sed -n -e '/^status:$/,$p')" | kubectl apply -f -
fi

简而言之,它下载现有的入口配置,检查是否定义了应用程序,如果没有,则在重新应用status:条目和配置之前将其注入到文件末尾。与其说它是一个很好的解决方案,不如说它是一个技巧。

我想知道我是否可以配置入口,以便根据同一项目中服务上的一些注释动态加载主机和路径,或者是否至少可以调用一些命令来添加或删除主机。

EN

回答 2

Stack Overflow用户

发布于 2020-11-28 07:09:42

您可以下载JSON格式的配置,并使用kubectl补丁COMMAND更新对象。因此,您可以将所有这些放在一个脚本中,以动态更新入口。有关更多信息,请单击上面提到的链接。

示例: kubectl get ing mying -o json

票数 0
EN

Stack Overflow用户

发布于 2020-11-29 07:45:56

我不确定你的要求是什么,但我猜通常会用Helm来做这样的事情。您可以使用模板定义入口,并指定可以提供生成该文件所需的值的values.yaml。对用helm create生成的舵图稍作修改

代码语言:javascript
复制
{{- if .Values.ingress.enabled -}}
{{- $fullName := include "ingresstest.fullname" . -}}
{{- $svcPort := .Values.service.port -}}
{{- if semverCompare ">=1.14-0" .Capabilities.KubeVersion.GitVersion -}}
apiVersion: networking.k8s.io/v1beta1
{{- else -}}
apiVersion: extensions/v1beta1
{{- end }}
kind: Ingress
metadata:
  name: {{ $fullName }}
  labels:
    {{- include "ingresstest.labels" . | nindent 4 }}
  {{- with .Values.ingress.annotations }}
  annotations:
    {{- toYaml . | nindent 4 }}
  {{- end }}
spec:
  {{- if .Values.ingress.tls }}
  tls:
    {{- range .Values.ingress.tls }}
    - hosts:
        {{- range .hosts }}
        - {{ . | quote }}
        {{- end }}
      secretName: {{ .secretName }}
    {{- end }}
  {{- end }}
  rules:
    {{-   range $host := .Values.ingress.hosts }} 
    - host: {{ $host.host | quote }}
      http:
        paths:
          {{- range .paths }}
          - path: {{ . }}
            backend:
              serviceName: {{ $host.service }}
              servicePort: {{ $svcPort }}
          {{- end }}
    {{- end }}
  {{- end }}

和values.yaml (代码片段)

代码语言:javascript
复制
ingress:
  enabled: true
  annotations: {}
    # kubernetes.io/ingress.class: nginx
    # kubernetes.io/tls-acme: "true"
  hosts:
    - host: foo.example.com
      service: foo-service
      paths:
        - "/*"
    - host: bar.example.com
      service: bar-service
      paths:
     - "/*"

给出类似的结果:

代码语言:javascript
复制
apiVersion: networking.k8s.io/v1beta1
kind: Ingress
metadata:
  name: RELEASE-NAME-ingresstest
  labels:
    helm.sh/chart: ingresstest-0.1.0
    app.kubernetes.io/name: ingresstest
    app.kubernetes.io/instance: RELEASE-NAME
    app.kubernetes.io/version: "1.16.0"
    app.kubernetes.io/managed-by: Helm
spec:
  rules: 
    - host: "foo.example.com"
      http:
        paths:
          - path: /*
            backend:
              serviceName: foo-service
              servicePort: 80

    - host: "bar.example.com"
      http:
        paths:
          - path: /*
            backend:
              serviceName: bar-service
              servicePort: 80
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65037644

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档