itzg / minecraft-server-charts

MIT License
267 stars 142 forks source link

Add ipFamily-related options #167

Closed hrntknr closed 1 year ago

hrntknr commented 1 year ago

Add support for ipFamilyPolicy,ipFamilies. ref: https://kubernetes.io/docs/concepts/services-networking/dual-stack/

The actual output of yaml when values are not specified is as follows.

$ helm install minecraft oci://**********/library/minecraft --dry-run --debug
(omit)
---
# Source: minecraft/templates/minecraft-svc.yaml
apiVersion: v1
kind: Service
metadata:
  name: minecraft-minecraft
  labels:
    app: minecraft-minecraft
    chart: "minecraft-4.9.4"
    release: "minecraft"
    heritage: "Helm"
    app.kubernetes.io/name: "minecraft"
    app.kubernetes.io/instance: minecraft-minecraft
    app.kubernetes.io/version: "4.9.4"
  annotations:
    {}
spec:
  type: ClusterIP
  ports:
  - name: minecraft
    port: 25565
    targetPort: minecraft
    protocol: TCP
  selector:
    app: minecraft-minecraft

ipFamilyPolicy,ipFamilies can be specified as follows

helm install minecraft oci://**********/library/minecraft --dry-run --debug --values helm/minecraft/server01.yaml
(omit)
# Source: minecraft/templates/minecraft-svc.yaml
apiVersion: v1
kind: Service
metadata:
  name: minecraft-minecraft
  labels:
    app: minecraft-minecraft
    chart: "minecraft-4.9.4"
    release: "minecraft"
    heritage: "Helm"
    app.kubernetes.io/name: "minecraft"
    app.kubernetes.io/instance: minecraft-minecraft
    app.kubernetes.io/version: "4.9.4"
  annotations:
    {}
spec:
  type: LoadBalancer
  ipFamilyPolicy: RequireDualStack
  ipFamilies:
    - IPv4
    - IPv6
  ports:
  - name: minecraft
    port: 25565
    targetPort: minecraft
    protocol: TCP
  selector:
    app: minecraft-minecraft
hrntknr commented 1 year ago

I set PreferDualStack as the default policy, the yaml without the value would be as follows.

# Source: minecraft/templates/minecraft-svc.yaml
apiVersion: v1
kind: Service
metadata:
  name: minecraft-minecraft
  labels:
    app: minecraft-minecraft
    chart: "minecraft-4.9.5"
    release: "minecraft"
    heritage: "Helm"
    app.kubernetes.io/name: "minecraft"
    app.kubernetes.io/instance: minecraft-minecraft
    app.kubernetes.io/version: "4.9.5"
  annotations:
    {}
spec:
  type: ClusterIP
  ipFamilyPolicy: PreferDualStack
  ports:
  - name: minecraft
    port: 25565
    targetPort: minecraft
    protocol: TCP
  selector:
    app: minecraft-minecraft
hrntknr commented 1 year ago

Thanks for the review. You are right, it would be better to make it more generalized as extraServiceSpec. We will implement and propose extraServiceSpec in another PR.