正在尝试:
helm upgrade --namespace keycloak -f k8s/sandbox/values.yaml keycloak codecentric/keycloak
获取:
UPGRADE FAILED: cannot patch "keycloak-http" with kind Service: Service "keycloak-http" is invalid: [spec.ports[0].nodePort: Forbidden: may not be used when `type` is 'ClusterIP', spec.ports[1].nodePort: Forbidden: may not be used when `type` is 'ClusterIP']
但是,初始值是 NodePort,而不是 ClusterIP:
service:
# Annotations for headless and HTTP Services
annotations: {}
# Additional labels for headless and HTTP Services
labels: {}
# key: value
# The Service type
type: NodePort
还有 kubectl edit 显示类型:NodePort
spec:
clusterIP: <SomeIP>
externalTrafficPolicy: Cluster
ports:
- name: http
nodePort: 31062
port: 80
protocol: TCP
targetPort: http
- name: https
nodePort: 31258
port: 8443
protocol: TCP
targetPort: https
- name: http-management
nodePort: 32113
port: 9990
protocol: TCP
targetPort: http-management
selector:
app.kubernetes.io/instance: keycloak
app.kubernetes.io/name: keycloak
sessionAffinity: None
type: NodePort
这是来自 helm template
的 keycloak-http 服务。出于某种原因,它说的是 ClusterIp,但初始 values.yaml 都说的是 NodePort,而且 kubectl edit service keycloak-http 都说它是 NodePort:
# Source: keycloak/templates/service-http.yaml
apiVersion: v1
kind: Service
metadata:
name: keycloak-http
labels:
helm.sh/chart: keycloak-10.1.0
app.kubernetes.io/name: keycloak
app.kubernetes.io/instance: keycloak
app.kubernetes.io/version: "12.0.4"
app.kubernetes.io/managed-by: Helm
app.kubernetes.io/component: http
spec:
type: ClusterIP
ports:
- name: http
port: 80
targetPort: http
protocol: TCP
- name: https
port: 8443
targetPort: https
protocol: TCP
- name: http-management
port: 9990
targetPort: http-management
protocol: TCP
selector:
app.kubernetes.io/name: keycloak
app.kubernetes.io/instance: keycloak
有什么想法吗?
答案 0 :(得分:0)
请手动删除服务并重新执行 helm 升级
答案 1 :(得分:0)
我拉取了存储库并尝试将 values.yaml
更改为 NodePort
,这对我来说很好用。打印的模板有 NodePort
而不是 ClusterIP
。这意味着您可能做错了什么,或者可能使用了一些错误的值文件。
现在错误本身就在那里,因为您不能像那样更改服务类型,而 Kubernetes 不允许这样做,因为 NodePort
在服务模板中包含了附加参数:
"ports": [
{
"name": "http",
"nodePort": 30240,
"port": 8888,
"protocol": "TCP",
"targetPort": "http"
}
虽然这是 ClusterIP:
"ports": [
{
"name": "http",
"port": 8888,
"protocol": "TCP",
"targetPort": "http"
}
当您尝试像这样更改服务时,有几种可能的解决方法:
kubectl edit svc
手动更改服务类型