【问题标题】:Knative service with Keycloak gatekeeper sidecar带有 Keycloak 网关守卫边车的 Knative 服务
【发布时间】:2020-08-26 04:10:08
【问题描述】:

我正在尝试部署以下服务:

{{- if .Values.knativeDeploy }}
apiVersion: serving.knative.dev/v1
kind: Service
metadata:
{{- if .Values.service.name }}
  name: {{ .Values.service.name }}
{{- else }}
  name: {{ template "fullname" . }}
{{- end }}
  labels:
    chart: "{{ .Chart.Name }}-{{ .Chart.Version | replace "+" "_" }}"
spec:
  template:
    spec:
      containers:
      - image: quay.io/keycloak/keycloak-gatekeeper:9.0.3
        name: gatekeeper-sidecar
        ports:
        - containerPort: {{ .Values.keycloak.proxyPort }}
        env:
          - name: KEYCLOAK_CLIENT_SECRET
            valueFrom:
              secretKeyRef:
                name: {{ template "keycloakclient" . }}
                key: secret
        args:
        - --resources=uri=/*
        - --discovery-url={{ .Values.keycloak.url }}/auth/realms/{{ .Values.keycloak.realm }}
        - --client-id={{ template "keycloakclient" . }}
        - --client-secret=$(KEYCLOAK_CLIENT_SECRET)
        - --listen=0.0.0.0:{{ .Values.keycloak.proxyPort }} # listen on all interfaces
        - --enable-logging=true
        - --enable-json-logging=true
        - --upstream-url=http://127.0.0.1:{{ .Values.service.internalPort }} # To connect with the main container's port
        resources:
{{ toYaml .Values.gatekeeper.resources | indent 12 }}
      - name: {{ .Chart.Name }}
        image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}"
        imagePullPolicy: {{ .Values.image.pullPolicy }}
        env:
{{- range $pkey, $pval := .Values.env }}
        - name: {{ $pkey }}
          value: {{ quote $pval }}
{{- end }}
        envFrom:
{{ toYaml .Values.envFrom | indent 10 }}
        ports:
        - containerPort: {{ .Values.service.internalPort }}
        livenessProbe:
          httpGet:
            path: {{ .Values.probePath }}
            port: {{ .Values.service.internalPort }}
          initialDelaySeconds: {{ .Values.livenessProbe.initialDelaySeconds }}
          periodSeconds: {{ .Values.livenessProbe.periodSeconds }}
          successThreshold: {{ .Values.livenessProbe.successThreshold }}
          timeoutSeconds: {{ .Values.livenessProbe.timeoutSeconds }}
        readinessProbe:
          httpGet:
            path: {{ .Values.probePath }}
            port: {{ .Values.service.internalPort }}
          periodSeconds: {{ .Values.readinessProbe.periodSeconds }}
          successThreshold: {{ .Values.readinessProbe.successThreshold }}
          timeoutSeconds: {{ .Values.readinessProbe.timeoutSeconds }}
        resources:
{{ toYaml .Values.resources | indent 12 }}
      terminationGracePeriodSeconds: {{ .Values.terminationGracePeriodSeconds }}
{{- end }}

失败并出现以下错误:

Error from server (BadRequest): error when creating "/tmp/helm-template-workdir-290082188/jx/output/namespaces/jx-staging/env/charts/docs/templates/part0-ksvc.yaml": admission webhook "webhook.serving.knative.dev" denied the request: mutation failed: expected exactly one, got both: spec.template.spec.containers'

现在,如果我阅读规范 (https://knative.dev/v0.15-docs/serving/getting-started-knative-app/),我可以看到这个示例:

apiVersion: serving.knative.dev/v1 # Current version of Knative
kind: Service
metadata:
  name: helloworld-go # The name of the app
  namespace: default # The namespace the app will use
spec:
  template:
    spec:
      containers:
        - image: gcr.io/knative-samples/helloworld-go # The URL to the image of the app
          env:
            - name: TARGET # The environment variable printed out by the sample app
              value: "Go Sample v1"

结构完全相同。现在,我的问题是:

  1. 如何在不等待部署的情况下验证我的 yam? Intellij 有一个 k8n 插件,但我找不到机器可消耗的 serving.knative.dev/v1 的 CRD 模式。 (https://knative.dev/docs/serving/spec/knative-api-specification-1.0/)
  2. knative 是否允许有多个容器? (该配置与 apiVersion 完美配合:apps/v1 kind: Deployment)

【问题讨论】:

    标签: kubernetes knative-serving


    【解决方案1】:

    多容器是knative version 0.16 中的 alpha 功能。 此功能需要通过在config-features ConfigMap 中将multi-container 设置为enabled 来启用。所以编辑配置图使用

    kubectl edit cm config-features 并启用该功能。

    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: config-features
      namespace: knative-serving
      labels:
        serving.knative.dev/release: devel
      annotations:
        knative.dev/example-checksum: "983ddf13"
    data:
      _example: |
        ...
        # Indicates whether multi container support is enabled
        multi-container: "enabled"
        ...
    

    【讨论】:

      【解决方案2】:

      您使用的是什么版本的 Knative?

      对多个容器的支持是added as an alpha feature in 0.16。如果您未使用 0.16 或更高版本或未启用 alpha 标志,则请求可能会被阻止。

      在 Knative 中为多容器支持定义了许多边缘情况,因此默认是保守的,并且在探索约束之前只允许一个容器。

      【讨论】:

        猜你喜欢
        • 2021-08-08
        • 1970-01-01
        • 2020-07-01
        • 1970-01-01
        • 1970-01-01
        • 2011-01-17
        • 1970-01-01
        • 2016-01-14
        • 1970-01-01
        相关资源
        最近更新 更多